Bueno inicio diciendo q soy nuevo en c# y ya voy avnzando bastante hasta esto...
estoy haciendo una aplicacion de escritorio usando capas (negrocio, datos, entidad y presentacion) eso no es importante lo q pasa es q quiero reportar un tabla en un datagrid box, esta tabla contiene campos nulos y me sale este error al depurar mi aplicacion
Cita:
aca les dejo mi codigo por si es q lo quieren analizar:Los datos tienen valor Null. No se puede llamar a este método o propiedad con valores Null.
Código:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using Entidad; namespace Datos { public class clienteD { private static readonly clienteD _Instancia = new clienteD(); public static clienteD Instancia { get { return _Instancia; } } public List<clienteE> ListarClientes() { //Creamos una nueva conexion sql SqlConnection cnn = new SqlConnection(conexionD.Instancia.Cadenaconexion()); try { //Abrimos la conexion cnn.Open(); //Creamos una nueva consulta y //le pasamos como parametro un procedimiento almacenado(SP) SqlCommand consultasql = new SqlCommand("procClientes", cnn); //Especificamos que le estamos un parametro del tipo SP consultasql.CommandType = System.Data.CommandType.StoredProcedure; //Pasamos los parametros para el SP //Tipoconsulta nos servira para seleccionar la operacion que queramos //dentro del SP //2=Select consultasql.Parameters.Add("(arroba)Tipoconsulta", System.Data.SqlDbType.TinyInt).Value = 2; //Creamos una tabla virtual para almacenar los datos q se //consiguen en la consultaSQL SqlDataReader Reader = consultasql.ExecuteReader(); List<clienteE> Coleccion = new List<clienteE>(); while (Reader.Read()) { Coleccion.Add(new clienteE(Reader.GetString(0), Reader.GetString(1), Reader.GetString(2), Reader.GetString(3), Reader.GetString(4), Reader.GetString(5), Reader.GetString(6))); } return Coleccion; } catch (Exception ex) { throw new Exception(ex.Message); } finally { //cerramos la variable sqlconecction cnn.Close(); //liberamos la variable sqlconecction de la memoria RAM cnn.Dispose(); } } } }
bueno esto tambien me paso cundo estuve programando en visual basic pero logre solucionarlo creando una clase, esta clse la intente hacer en c# pero como dije estoy muy verde y no sale...
esta es la clase en visual basic:
Código:
bueno este codigo lo converti a codigo c# pero me salen errores, este es el codigo convertidoImports System.Data.SqlClient Imports Capa_Entidad Public Class Comprueba Private Shared ReadOnly _instancia As Comprueba = New Comprueba Public Shared ReadOnly Property Instancia() As Comprueba Get Return _instancia End Get End Property Private Sub New() End Sub 'funcion q verifica los datos nulos y les da un valor por defecto Public Function verificando(ByVal lector, ByVal coleccion) As List(Of Producto) Dim melcochita0 As String Dim melcochita1 As String Dim melcochita2 As Decimal 'Dim melcochita3 As Guid If IsDBNull(lector(5)) Then melcochita0 = "" Else melcochita0 = lector.Item(5) End If If IsDBNull(lector(10)) Then melcochita1 = "" Else melcochita1 = lector.Item(10) End If If IsDBNull(lector(11)) Then melcochita2 = 0 Else melcochita2 = lector.Item(11) End If 'asignacion de los campos a la clase coleccion.Add(New Producto(lector.Item(0), lector.Item(1), lector.Item(2), lector.Item(3), lector.Item(4), melcochita0, lector.Item(6), lector.Item(7), lector.Item(8), lector.Item(9), melcochita1, melcochita2, lector.Item(12), lector.Item(13), lector.Item(14), lector.Item(15))) Return coleccion End Function End Class
Código:
los errores q me sale es referente a la variable lector de tipo objectusing System.Data.SqlClient; using Capa_Entidad; public class Comprueba{ private static Comprueba _instancia = new Comprueba(); public static Comprueba Instancia { get{ return _instancia; } } private Comprueba() { } //funcion q verifica los datos nulos y les da un valor por defecto public List<Producto> verificando(object lector, object coleccion) { string melcochita0; string melcochita1; decimal melcochita2; //Dim melcochita3 As Guid if( IsDBNull(lector[5]) ){ melcochita0 = ""; }else{ melcochita0 = lector[5]; } if( IsDBNull(lector[10]) ){ melcochita1 = ""; }else{ melcochita1 = lector[10]; } if( IsDBNull(lector[11]) ){ melcochita2 = 0; }else{ melcochita2 = lector[11]; } //asignacion de los campos a la clase coleccion.Add(new Producto(lector[0], lector[1], lector[2], lector[3], lector[4], melcochita0, lector[6], lector[7], lector[8], lector[9], melcochita1, melcochita2, lector[12], lector[13], lector[14], lector[15])); return coleccion; } }
Cita:
1. el nombre IsDBNull no existe en el contexto actual
2. no se puede aplicar la indizacion con [] a una expression de tipo object
3. no se puede covertir implicitamente e tipo object en 'System.Collections.Generic.List<Entidad.ClienteE> '. Ya existe una conversion explicita (compruebe si flta un conversion)
2. no se puede aplicar la indizacion con [] a una expression de tipo object
3. no se puede covertir implicitamente e tipo object en 'System.Collections.Generic.List<Entidad.ClienteE> '. Ya existe una conversion explicita (compruebe si flta un conversion)
bueno como ven estoy mas perdido q huevo en cebiche, ojala puedan ayudarme y si alguien me puede ayudaar con la clase de comprobacion pos chevere ojala haya alguien trabajado de esta manera, nos vemos gracias de antemano...
Salu2...