conversão de nullo para inteiro ou data
Olá,
Olá a todos,
Eu criei uma aplicação para cadastro de clientes em camadas.
na camada de acesso aos dados, eu atribuo aos atributos do objeto os valores dos campos da tabela. e para isso eu converto os dados para os tipos dos respectivos atributos do objeto.
o problema é quando algum campo está vazio, ou seja, com valor NULL, ele nao faz a conversão pois diz que não está no formato certo para o tipo.
Como eu ajusto isso?
public DTOSCM.Clientes Select() { DTOSCM.Clientes clients = new DTOSCM.Clientes(); SqlConnection con = new SqlConnection(ConStr); string SQL = "select * from Clientes";//"SelectMagazines"; SqlCommand cmd = new SqlCommand(SQL, con); cmd.CommandType = CommandType.Text; //cmd.CommandType = CommandType.Text; con.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { DTOSCM.Cliente client = new DTOSCM.Cliente(); client.IDCliente = int.Parse(dr["IDCliente"].ToString()); client.numeroCliente = int.Parse(dr["numeroCliente"].ToString()); client.nomeFantasia = dr["nomeFantasia"].ToString(); client.razaoSocial = dr["razaoSocial"].ToString(); client.dataContratacao = DateTime.Parse(dr["dataContratacao"].ToString()); client.dataRescisao = DateTime.Parse(dr["dataRescisao"].ToString()); } con.Close(); return clients; } Muito obrigado.
Eu criei uma aplicação para cadastro de clientes em camadas.
na camada de acesso aos dados, eu atribuo aos atributos do objeto os valores dos campos da tabela. e para isso eu converto os dados para os tipos dos respectivos atributos do objeto.
o problema é quando algum campo está vazio, ou seja, com valor NULL, ele nao faz a conversão pois diz que não está no formato certo para o tipo.
Como eu ajusto isso?
public DTOSCM.Clientes Select() { DTOSCM.Clientes clients = new DTOSCM.Clientes(); SqlConnection con = new SqlConnection(ConStr); string SQL = "select * from Clientes";//"SelectMagazines"; SqlCommand cmd = new SqlCommand(SQL, con); cmd.CommandType = CommandType.Text; //cmd.CommandType = CommandType.Text; con.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { DTOSCM.Cliente client = new DTOSCM.Cliente(); client.IDCliente = int.Parse(dr["IDCliente"].ToString()); client.numeroCliente = int.Parse(dr["numeroCliente"].ToString()); client.nomeFantasia = dr["nomeFantasia"].ToString(); client.razaoSocial = dr["razaoSocial"].ToString(); client.dataContratacao = DateTime.Parse(dr["dataContratacao"].ToString()); client.dataRescisao = DateTime.Parse(dr["dataRescisao"].ToString()); } con.Close(); return clients; } Muito obrigado.
João Teixeira
Curtidas 0
Respostas
Fabio Mans
27/01/2010
Olá João, basta você fazer um if, se for nulo você irá itribuir 0, caso contrário o valor do reader.
public DTOSCM.Clientes Select()
{
DTOSCM.Clientes clients = new DTOSCM.Clientes();
SqlConnection con = new SqlConnection(ConStr);
string SQL = "select * from Clientes";//"SelectMagazines";
SqlCommand cmd = new SqlCommand(SQL, con);
cmd.CommandType = CommandType.Text; //cmd.CommandType = CommandType.Text;
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
DTOSCM.Cliente client = new DTOSCM.Cliente();
client.IDCliente = Convert.IsDBNull(dr["IDCliente"]) ? 0 : Convert.ToString(reader["IDCliente"]);
client.numeroCliente = int.Parse(dr["numeroCliente"].ToString());
client.nomeFantasia = dr["nomeFantasia"].ToString();
client.razaoSocial = dr["razaoSocial"].ToString();
client.dataContratacao = DateTime.Parse(dr["dataContratacao"].ToString());
client.dataRescisao = DateTime.Parse(dr["dataRescisao"].ToString());
}
con.Close();
return clients;
}
Estou utilizando um if ternário (IDCliente) Espero ter ajudado.
{
DTOSCM.Clientes clients = new DTOSCM.Clientes();
SqlConnection con = new SqlConnection(ConStr);
string SQL = "select * from Clientes";//"SelectMagazines";
SqlCommand cmd = new SqlCommand(SQL, con);
cmd.CommandType = CommandType.Text; //cmd.CommandType = CommandType.Text;
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
DTOSCM.Cliente client = new DTOSCM.Cliente();
client.IDCliente = Convert.IsDBNull(dr["IDCliente"]) ? 0 : Convert.ToString(reader["IDCliente"]);
client.numeroCliente = int.Parse(dr["numeroCliente"].ToString());
client.nomeFantasia = dr["nomeFantasia"].ToString();
client.razaoSocial = dr["razaoSocial"].ToString();
client.dataContratacao = DateTime.Parse(dr["dataContratacao"].ToString());
client.dataRescisao = DateTime.Parse(dr["dataRescisao"].ToString());
}
con.Close();
return clients;
}
Estou utilizando um if ternário (IDCliente) Espero ter ajudado.
GOSTEI 0
João Teixeira
27/01/2010
Olá,
Pois é, eu fiz isso com o int e com o datetime, o problema é que aparece no gridview 0 e aparece 01/01/0001.
se eu for editar estes dados serão gravados na tabela, mas eu quero que continuem como vazios(nulos).
GOSTEI 0
Fabio Mans
27/01/2010
Tente assim nunca fiz, mas veja se da certo. Veja o teste int? Também mude o construtor.
private int? teste;
private string elementoPep;
private string descricao;
public ElementoPepVO(int? teste, string elementoPep, string descricao)
{
this.teste = teste;
this.elementoPep = elementoPep;
this.descricao = descricao;
}
public string ElementoPep
{
get { return elementoPep; }
set { elementoPep = value; }
}
public string Descricao
{
get { return descricao; }
set { descricao = value; }
}
public int Teste
{
get { return teste; }
set { teste = value; }
}
Veja que passo null
while (reader.Read())
{
ElementoPepVO vo = new ElementoPepVO(null,
(string) reader["ELEMENTOPEP"],
Convert.IsDBNull(reader["DESCRICAO"]) ? string.Empty : Convert.ToString(reader["DESCRICAO"]));
retorno.Add(vo);
}
Fabio
GOSTEI 0
João Teixeira
27/01/2010
O problema agora é que, quando eu clico em edit em alguma linha, eu altero o dado, mas quando eu salvo, as alterações nao sao gravadas.
public void Update(DTOSCM.Cliente Client)
{
SqlConnection con = new SqlConnection(ConStr);
string SQL = "UPDATE Clientes SET nomeFantasia=@nomeFantasia where numeroCliente=@numeroCliente"; //"UpdateMagazine";
SqlCommand cmd = new SqlCommand(SQL, con);
cmd.CommandType = CommandType.Text;//CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@nomeFantasia", Client.nomeFantasia);
con.Open();
try
{
cmd.ExecuteNonQuery();
}
finally
{
con.Close();
}
}
GOSTEI 0
Fabio Mans
27/01/2010
Porque deve estar Zero. Mas estranho o que você quer fazer, nunca vi um ID null.
Fabio
GOSTEI 0
João Teixeira
27/01/2010
nao nao... o ID não é null.
alguns campos que recebem, por exemplo o id de um técnico, podem estar vazios ou não, para relacionamentos de tabelas. e tem as datas, que podem estar vazias e precisam continuar.
GOSTEI 0
Fabio Mans
27/01/2010
No que mais posso ajudar?
GOSTEI 0
João Teixeira
27/01/2010
Eu segui o tutorial do guinter pauli, mas o update não funciona.
o código do método update está errado?
GOSTEI 0
Fabio Mans
27/01/2010
Pelo que vi está OK, utilizou o debug para ver o que está ocorrendo?
GOSTEI 0
João Teixeira
27/01/2010
Na verdade havia um problema no código, eu uso dois parametros no SQL e só preencho um.
Agora já está funcionando.
Obrigado.
GOSTEI 0