Foros del Web » Programación para mayores de 30 ;) » .NET »

Reportar campos nulos - C# - SQL 2005

Estas en el tema de Reportar campos nulos - C# - SQL 2005 en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 29/07/2009, 02:50
 
Fecha de Ingreso: febrero-2008
Mensajes: 54
Antigüedad: 16 años, 2 meses
Puntos: 0
Pregunta Reportar campos nulos - C# - SQL 2005

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...
  #2 (permalink)  
Antiguo 05/08/2009, 08:03
 
Fecha de Ingreso: octubre-2006
Mensajes: 86
Antigüedad: 17 años, 6 meses
Puntos: 1
Respuesta: Reportar campos nulos - C# - SQL 2005

Hola no se si te es de ayuda pero si lo que tu quieres es llenar un Datagridview apartir de una consulta podrias hacerlo de otra forma..

Ejecutas tu consulta y el resultado lo depositas en SqlReader.

SqlDataReader Reader = consultasql.ExecuteReader();

luego lo unico que tienes que hacer es crear un Datatatable
DataTable Dt = new DataTable();

y luego solo viertes la informacion del Sqlreader en el Datatable de la siguiente forma
Dt.Load(Reader);

Y ya esta, puedes hacer que tu clase te retorne un Dataset o un Datatable

Y luego lo unico que tienes que hacer es
dataGridView.DataSource = miclase.mifuncion();

Y no tienes que preocuparte por los campos NULL.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:46.