[ Foro de C# ]

C# - Leer columna con valor nulo

03-Nov-2015 04:23
Henry García O (+1)
3 Respuestas

Buenas noches,

Estoy recorriendo los DataRows de una tabla que cargo mediante un procedimiento almacenado, pero una de las columnas es una fecha y tiene y puede tener valores nulos, como hago para leer ese campo nulo del datarow sin que me genere error, tengo el siguiente código donde debo leer el campo tipo fecha, este código funciona correctamente con los campos que tiene.

Ambiente de trabajo: Visual studio 2013 Ultimate
                                      C#
                                      Sq server 2011.

Este es el código y funciona correctamente, ahí debo de agregar la instrucción para que me lea la fecha que puede venir nula:


public List<Cliente> ConsultarClientes()
        {
            List<Cliente> lstCliente=new List<Cliente>();
            try
            {
                DBFactory objFactory = new DBFactory(strProveedor, strConexion);
                DataSet dtRsto = objFactory.EjecutarProcedimiento("usp_ObtenerClientes");
                if (dtRsto != null)
                {
                    if (dtRsto.Tables.Count > 0)
                    {
                        foreach (DataRow fila in dtRsto.Tables[0].Rows)
                        {
                            var cliente = new Cliente { Id = int.Parse(fila["IDCliente"].ToString()), 
                                                        Cedula = fila["Documento"].ToString(),
                                                        Nombre = fila["Nombres"].ToString(),
                                                        Apellido = fila["Apellidos"].ToString()

                            };
                            lstCliente.Add(cliente);
                            //tblDatos = dtRsto.Tables[0];
                        }
                    }
                }
                else
                {
                    strError = "Ocurrio un error al consultar";
                }
            }
            catch (Exception er)
            {
                strError = er.Message + " - " + er.StackTrace;
            }

            return lstCliente;

        }


Muchas gracias.


13-Nov-2015 20:28
Nacho Cabanes (+84)

Si tiene un valor nulo, funciones como el Int.Parse darán un error. Como solución sencilla de compromiso, puedes envolver esa conversión de tipo de datos dentro de un bloque try-catch.


23-Nov-2015 10:58
Daniel Segura (+2)

También puedes controlar ese error a nivel de Base de datos con la función IFNULL si prevees que esa columna puede contener valores nulos.


27-Nov-2015 10:49
Carlos Rodriguez (+1)

Además de poner null en la base de datos ,el problema es que estas convirtiendo a string y a int valores null por eso los errores.
Yo usaría int? Y string? Para manejar los null.
Aquí un ejemplo:
http://www.dotnetperls.com/nullable-int






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)