CLASSES / PARÂMETROS / NULL
Olá Pessoal.
Gostaria que me indicassem uma maneira prática de passar parâmetros para uma classe, considerando que esses parâmetros podem ser nulos.
No exemplo abaixo considerando a propriedade _valor (ver destaques em vermelho) o máximo que eu consegui fazer foi colocar a propriedade como nullable (para que ela aceitasse null na atribuibuição), e no procedimento Save testei se o _valor for igual a null e atribui DBNull.Value;
Só que assim tem que ser colocado um if para cada propriedade.
Qual a melhor maneira de fazer isso, botando praticidade na programação.
Grato
Sidney
private int _cod_fornecedor;
private string _num_documento;
private string _serie_nota;
private int _sequencial;
private int _diferenciador;
private float _valor_base;
private float _aliquota;
private float? _valor;
private float _perc_tributario;
private float _outros;
private bool _found; public int CodFornecedor
{
get { return _cod_fornecedor; }
set { _cod_fornecedor = value; }
} public string NumDocumento
{
get { return _num_documento; }
set { _num_documento = value; }
} public string SerieNota
{
get { return _serie_nota; }
set { _serie_nota = value; }
} public int Sequencial
{
get { return _sequencial; }
set { _sequencial = value; }
} public int Diferenciador
{
get { return _diferenciador; }
set { _diferenciador = value; }
} public float ValorBase
{
get { return _valor_base; }
set { _valor_base = value; }
} public float Aliquota
{
get { return _aliquota; }
set { _aliquota = value; }
} public float? Valor
{
get { return _valor; }
set { _valor = value; }
} public float PercTributario
{
get { return _perc_tributario; }
set { _perc_tributario = value; }
} public float Outros
{
get { return _outros; }
set { _outros = value; }
} public bool Found
{
get { return _found; }
}
public bool Save()
{
SqlConnection sqlConn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommand cmd = new SqlCommand("usp_SLFEntradasICMSInsert", sqlConn);
bool result; cmd.Parameters.Add("@CodFornecedor", SqlDbType.Int).Value = _cod_fornecedor;
cmd.Parameters.Add("@NumDocumento", SqlDbType.Char, 7).Value = _num_documento;
cmd.Parameters.Add("@SerieNota", SqlDbType.Char, 2).Value = _serie_nota;
cmd.Parameters.Add("@Diferenciador", SqlDbType.Int).Value = _diferenciador;
cmd.Parameters.Add("@ValorBase", SqlDbType.Float).Value = _valor_base;
cmd.Parameters.Add("@Aliquota", SqlDbType.Float).Value = _aliquota;
if (_valor != null)
cmd.Parameters.Add("@Valor", SqlDbType.Float).Value = _valor;
else
cmd.Parameters.Add("@Valor", SqlDbType.Float).Value = DBNull.Value;
cmd.Parameters.Add("@PercTributario", SqlDbType.Float).Value = _perc_tributario;
cmd.Parameters.Add("@Outros", SqlDbType.Float).Value = _outros; try
{
sqlConn.Open();
cmd.CommandType = CommandType.StoredProcedure;
result = Convert.ToBoolean(cmd.ExecuteNonQuery());
} catch { throw; } finally
{
sqlConn.Close();
cmd.Dispose();
sqlConn.Dispose();
} return result;
}
private int _cod_fornecedor;
private string _num_documento;
private string _serie_nota;
private int _sequencial;
private int _diferenciador;
private float _valor_base;
private float _aliquota;
private float? _valor;
private float _perc_tributario;
private float _outros;
private bool _found; public int CodFornecedor
{
get { return _cod_fornecedor; }
set { _cod_fornecedor = value; }
} public string NumDocumento
{
get { return _num_documento; }
set { _num_documento = value; }
} public string SerieNota
{
get { return _serie_nota; }
set { _serie_nota = value; }
} public int Sequencial
{
get { return _sequencial; }
set { _sequencial = value; }
} public int Diferenciador
{
get { return _diferenciador; }
set { _diferenciador = value; }
} public float ValorBase
{
get { return _valor_base; }
set { _valor_base = value; }
} public float Aliquota
{
get { return _aliquota; }
set { _aliquota = value; }
} public float? Valor
{
get { return _valor; }
set { _valor = value; }
} public float PercTributario
{
get { return _perc_tributario; }
set { _perc_tributario = value; }
} public float Outros
{
get { return _outros; }
set { _outros = value; }
} public bool Found
{
get { return _found; }
}
public bool Save()
{
SqlConnection sqlConn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommand cmd = new SqlCommand("usp_SLFEntradasICMSInsert", sqlConn);
bool result; cmd.Parameters.Add("@CodFornecedor", SqlDbType.Int).Value = _cod_fornecedor;
cmd.Parameters.Add("@NumDocumento", SqlDbType.Char, 7).Value = _num_documento;
cmd.Parameters.Add("@SerieNota", SqlDbType.Char, 2).Value = _serie_nota;
cmd.Parameters.Add("@Diferenciador", SqlDbType.Int).Value = _diferenciador;
cmd.Parameters.Add("@ValorBase", SqlDbType.Float).Value = _valor_base;
cmd.Parameters.Add("@Aliquota", SqlDbType.Float).Value = _aliquota;
if (_valor != null)
cmd.Parameters.Add("@Valor", SqlDbType.Float).Value = _valor;
else
cmd.Parameters.Add("@Valor", SqlDbType.Float).Value = DBNull.Value;
cmd.Parameters.Add("@PercTributario", SqlDbType.Float).Value = _perc_tributario;
cmd.Parameters.Add("@Outros", SqlDbType.Float).Value = _outros; try
{
sqlConn.Open();
cmd.CommandType = CommandType.StoredProcedure;
result = Convert.ToBoolean(cmd.ExecuteNonQuery());
} catch { throw; } finally
{
sqlConn.Close();
cmd.Dispose();
sqlConn.Dispose();
} return result;
}
Sidney Mendonça/
Curtidas 0
Respostas
Fabio Mans
01/02/2010
Sidney não tem muito como fugir da verificação, o que você pode fazer é utilizar um if ternário para ficar mais elegante e criar uma propriedade ValorMinimo, veja como fiz.
public static int ValorMinimo
{
get { return 0; }
}
public bool Save()
{
SqlConnection sqlConn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommand cmd = new SqlCommand("usp_SLFEntradasICMSInsert", sqlConn);
bool result;
cmd.Parameters.Add("@CodFornecedor", SqlDbType.Int).Value = _cod_fornecedor;
cmd.Parameters.Add("@NumDocumento", SqlDbType.Char, 7).Value = _num_documento;
cmd.Parameters.Add("@SerieNota", SqlDbType.Char, 2).Value = _serie_nota;
cmd.Parameters.Add("@Diferenciador", SqlDbType.Int).Value = _diferenciador;
cmd.Parameters.Add("@ValorBase", SqlDbType.Float).Value = _valor_base;
cmd.Parameters.Add("@Aliquota", SqlDbType.Float).Value = _aliquota;
cmd.Parameters.Add("@Valor", SqlDbType.Float).Value = _valor ?? ValorMinimo;
//Ou
cmd.Parameters.Add("@Valor", SqlDbType.Float).Value = _valor != null ? (object) _valor : DBNull.Value;
cmd.Parameters.Add("@PercTributario", SqlDbType.Float).Value = _perc_tributario;
cmd.Parameters.Add("@Outros", SqlDbType.Float).Value = _outros;
Mas tem que ser assim, não vejo outra saída.
Fabio
GOSTEI 0
Fabio Mans
01/02/2010
Posso ajudar em mais alguma coisa?
GOSTEI 0
Sidney Mendonça/
01/02/2010
Está tudo certo.
Chamado concluído.
Obrigado pela atenção.
Sidney
GOSTEI 0