Comment vérifier la valeur NULL dans MySqlDataReader par le nom de la colonne?
-
12-10-2019 - |
Question
Comment puis-je vérifier une valeur NULL
dans une MySqlDataReader
ouverte?
Ce qui suit ne fonctionne pas; il est frappant toujours le else
:
if (rdr.GetString("timeOut") == null)
{
queryResult.Egresstime = "Logged in";
}
else
{
queryResult.Egresstime = rdr.GetString("timeOut");
}
rdr.IsDbNull(int i)
accepte uniquement un numéro de colonne, pas le nom.
La solution
var ordinal = rdr.GetOrdinal("timeOut");
if(rdr.IsDBNull(ordinal)) {
queryResult.Egresstime = "Logged in";
} else {
queryResult.Egresstime = rdr.GetString(ordinal);
}//if
ou
if(Convert.IsDBNull(rdr["timeOut"])) {
queryResult.Egresstime = "Logged in";
} else {
queryResult.Egresstime = rdr.GetString("timeOut");
}//if
Autres conseils
if (rdr.GetString ( "Timeout") == DBNull.Value)
null
n'est pas la même chose que DBNull
Je suis désolé, mauvaise réponse, Sam B est juste. Je prenais cela pour des trucs DataRow
.
SqlDataReader ne sont fortement typé GetString()
et fournit IsDBNull(int column)
pour ce cas.
Vous devez appeler rdr.IsDBNull(column)
pour déterminer si la valeur est DbNull
.
Vous pouvez comparer l'objet retrive du champ NULL avec DBNull .value.
Modifier null
à DBNull.Value
.
Vous pouvez également faire:
If (string.IsNullOrEmpty(rdr.GetString("timeOut"))
Voici que je préfère:
var MyString = rdr["column"] is DBNull ? "It's null!" : rdr.GetString("column");
par exemple (pour l'exigence initiale).
queryResult.Egresstime = rdr["timeOut"] is DBNull ? "Logged in" : rdr.GetString("timeOut");
Voici une méthode que j'ai créé pour lire DBNull
et retourner un Incase de default(T)
:
private T GetNullable<T>(MySqlDataReader reader, int ordinal, Func<int, T> getValue)
{
if (reader.IsDBNull(ordinal))
{
return default(T);
}
return getValue(ordinal);
}
Il peut être utilisé comme ceci:
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);
}
Le T
de type générique sera résolu en fonction de la valeur de retour de la méthode reader.
-. Si elle retourne une chaîne, vous recevrez un Incase de null
de DBNull
. Si elle est un int
il retournera 0
, etc.
Note:. Pour les valeurs entières il pourrait ne pas être souhaitable d'obtenir un 0
alors soyez prudent