Wie für NULL in MySqlDataReader durch die Spaltennamen überprüfen?
-
12-10-2019 - |
Frage
Wie kann ich prüfen, ob ein NULL
Wert in einem offenen MySqlDataReader
?
In der folgenden nicht funktioniert; Es ist immer das else
schlagen:
if (rdr.GetString("timeOut") == null)
{
queryResult.Egresstime = "Logged in";
}
else
{
queryResult.Egresstime = rdr.GetString("timeOut");
}
rdr.IsDbNull(int i)
akzeptiert nur eine Spaltennummer, nicht Namen.
Lösung
var ordinal = rdr.GetOrdinal("timeOut");
if(rdr.IsDBNull(ordinal)) {
queryResult.Egresstime = "Logged in";
} else {
queryResult.Egresstime = rdr.GetString(ordinal);
}//if
oder
if(Convert.IsDBNull(rdr["timeOut"])) {
queryResult.Egresstime = "Logged in";
} else {
queryResult.Egresstime = rdr.GetString("timeOut");
}//if
Andere Tipps
if (rdr.GetString ( "timeout") == DBNull.Value)
null
ist nicht die gleiche wie DBNull
Es tut mir leid, falsche Antwort, ist Sam B richtig. Ich verwechselte dies für DataRow
Sachen.
SqlDataReader hat GetString()
stark typisiert und bietet IsDBNull(int column)
für diesen Fall.
Sie müssen rdr.IsDBNull(column)
anrufen, um zu bestimmen, ob der Wert DbNull
ist.
Sie können das Objekt vergleichen, die von NULL Feld abrufen mit DBNull .Wert .
Ändern null
zu DBNull.Value
.
Sie können auch tun:
If (string.IsNullOrEmpty(rdr.GetString("timeOut"))
Hier ist ein I wie:
var MyString = rdr["column"] is DBNull ? "It's null!" : rdr.GetString("column");
Z. B (für die ursprüngliche Anforderung).
queryResult.Egresstime = rdr["timeOut"] is DBNull ? "Logged in" : rdr.GetString("timeOut");
Hier ist eine Methode, die ich erstellt DBNull
zu lesen und ein default(T)
einhüllen zurück:
private T GetNullable<T>(MySqlDataReader reader, int ordinal, Func<int, T> getValue)
{
if (reader.IsDBNull(ordinal))
{
return default(T);
}
return getValue(ordinal);
}
Es kann wie folgt verwendet werden:
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);
}
Der generische Typ T
wird auf der Grundlage der Rückgabewert der reader.
- Methode gelöst werden. Wenn es einen String zurückgibt werden Sie eine null
Incase DBNull
erhalten. Wenn es ein int
ist, wird es 0
zurückkehren, etc.
. Hinweis: für ganzzahlige Werte kann es kein 0
zu bekommen, so vorsichtig sein, gewünscht wird