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