hola a todos vengo con un problema q de seguro a muchos les ah pasado, estuve buscando por todas paartes pero no doy...
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: Los datos tienen valor Null. No se puede llamar a este método o propiedad con valores Null.
aca les dejo mi codigo por si es q lo quieren analizar:
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:
Imports 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
bueno este codigo lo converti a codigo c# pero me salen errores, este es el codigo convertido
Código:
using 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;
}
}
los errores q me sale es referente a la variable lector de tipo object
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)
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...