conversão de nullo para inteiro ou data

27/01/2010

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.
João Teixeira

João Teixeira

Curtidas 0

Respostas

Fabio Mans

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.
GOSTEI 0
João Teixeira

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

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

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

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

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

Fabio Mans

27/01/2010

No que mais posso ajudar?
GOSTEI 0
João Teixeira

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

Fabio Mans

27/01/2010

Pelo que vi está OK, utilizou o debug para ver o que está ocorrendo?
GOSTEI 0
João Teixeira

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
POSTAR