2011-01-19 8 views
16

¿Cómo puedo verificar el valor de NULL en un MySqlDataReader abierto?¿Cómo verificar NULL en MySqlDataReader por el nombre de la columna?

Lo siguiente no funciona; siempre está golpeando la else:

if (rdr.GetString("timeOut") == null) 
{ 
    queryResult.Egresstime = "Logged in"; 
} 
else 
{ 
    queryResult.Egresstime = rdr.GetString("timeOut"); 
} 

rdr.IsDbNull(int i) sólo acepta un número de columna, no nombra.

Respuesta

28
var ordinal = rdr.GetOrdinal("timeOut"); 
if(rdr.IsDBNull(ordinal)) { 
    queryResult.Egresstime = "Logged in"; 
} else { 
    queryResult.Egresstime = rdr.GetString(ordinal); 
}//if 

o

if(Convert.IsDBNull(rdr["timeOut"])) { 
    queryResult.Egresstime = "Logged in"; 
} else { 
    queryResult.Egresstime = rdr.GetString("timeOut"); 
}//if 
+0

Eres el ganador de tu propio cheque verde. Usé el segundo. ¡Gracias! – rd42

+0

pequeño error tipográfico en el segundo ejemplo: cambiar "IsDbNull" por "IsDBNull" – 4mla1fn

+0

@ 4mla1fn Gracias, he editado mi respuesta. –

13

si (rdr.GetString ("Tiempo de espera") == DBNull.Value)

null no es lo mismo que DBNull

lo siento respuesta, mal, Sam B es correcto. Lo confundí con DataRow cosas.

SqlDataReader tiene una letra fuerte GetString() y proporciona IsDBNull(int column) para este caso.

+2

creo que debería ser 'DBNull.Value' – VoodooChild

+0

@BoodooChild - gracias – Axarydax

+0

Heres lo que consigo un error \t 1: El operador '==' no se puede aplicar a operandos de tipo 'cadena' y 'System.DBNull' – rd42

1

Cambie null a DBNull.Value.

+0

Aquí lo que obtengo Error \t 1: El operador '==' no se puede aplicar a los operandos de tipo 'cadena' y 'System.DBNull' - – rd42

1

También puede hacer:

If (string.IsNullOrEmpty(rdr.GetString("timeOut"))

+0

Tiene el mismo efecto que (rdr.GetString ("timeOut") == null) – rd42

+1

@ rd42: entonces, ¿cuál es el valor real en ese campo cuando depura? ¿Sólo curioso? – VoodooChild

+0

El valor es: 12/7/2010 10:16:46 AM Gracias por su ayuda. – rd42

3

Debe llamar rdr.IsDBNull(column) para determinar si el valor es DbNull.

0

Aquí hay uno que me gusta:

var MyString = rdr["column"] is DBNull ? "It's null!" : rdr.GetString("column"); 

P. ej (por el requisito original):

queryResult.Egresstime = rdr["timeOut"] is DBNull ? "Logged in" : rdr.GetString("timeOut"); 
Cuestiones relacionadas