c# - isdbnull - ¿Cómo verificar NULL en MySqlDataReader por el nombre de la columna?
reader is null c# (8)
¿Cómo puedo verificar un valor NULL en un MySqlDataReader abierto?
Lo siguiente no funciona; siempre está golpeando al else :
if (rdr.GetString("timeOut") == null)
{
queryResult.Egresstime = "Logged in";
}
else
{
queryResult.Egresstime = rdr.GetString("timeOut");
}
rdr.IsDbNull(int i) solo acepta un número de columna, no un nombre.
Aquí hay un método que creé para leer DBNull y devolver un caso default(T) caso de:
private T GetNullable<T>(MySqlDataReader reader, int ordinal, Func<int, T> getValue)
{
if (reader.IsDBNull(ordinal))
{
return default(T);
}
return getValue(ordinal);
}
Se puede utilizar así:
if (reader.Read())
{
account = new Account();
account.Id = reader.GetInt32(0);
account.Name = reader.GetString(1);
account.MailVerifiedAt = GetNullable(reader, 2, reader.GetDateTime);
account.MailToken = GetNullable(reader, 3, reader.GetString);
}
El tipo genérico T se resolverá en función del valor de retorno del reader. - metodo Si devuelve una cadena, recibirá un null caso de DBNull . Si es un int devolverá 0 , etc.
Nota: para valores enteros, es posible que no se desee obtener un 0 así que tenga cuidado.
Aquí hay uno que me gusta:
var MyString = rdr["column"] is DBNull ? "It''s null!" : rdr.GetString("column");
Por ejemplo (para el requisito original):
queryResult.Egresstime = rdr["timeOut"] is DBNull ? "Logged in" : rdr.GetString("timeOut");
Cambiar null a DBNull.Value .
Debe llamar a rdr.IsDBNull(column) para determinar si el valor es DbNull .
Puede comparar el objeto que se recupera del campo NULL con DBNull.Value .
También puedes hacer:
If (string.IsNullOrEmpty(rdr.GetString("timeOut"))
if (rdr.GetString ("timeOut") == DBNull.Value)
null no es lo mismo que DBNull
Lo siento, respuesta incorrecta, Sam B tiene razón. Lo confundí con cosas de DataRow .
SqlDataReader sí tiene tipeado GetString() y proporciona IsDBNull(int column) para este caso.
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