Как проверить NULL в MySqlDataReader по имени столбца?
Как проверить значение NULL
в открытом MySqlDataReader
?
Не работает следующее: он всегда нажимает else
:
if (rdr.GetString("timeOut") == null)
{
queryResult.Egresstime = "Logged in";
}
else
{
queryResult.Egresstime = rdr.GetString("timeOut");
}
rdr.IsDbNull(int i)
принимает только номер столбца, а не имя.
Ответы
Ответ 1
var ordinal = rdr.GetOrdinal("timeOut");
if(rdr.IsDBNull(ordinal)) {
queryResult.Egresstime = "Logged in";
} else {
queryResult.Egresstime = rdr.GetString(ordinal);
}//if
или
if(Convert.IsDBNull(rdr["timeOut"])) {
queryResult.Egresstime = "Logged in";
} else {
queryResult.Egresstime = rdr.GetString("timeOut");
}//if
Ответ 2
if (rdr.GetString( "timeOut" ) == DBNull.Value)
null
не совпадает с DBNull
Прошу прощения, неверный ответ, Сэм Б прав. Я принял это за DataRow
.
SqlDataReader имеет строго типизированный GetString()
и предоставляет IsDBNull(int column)
для этого случая.
Ответ 3
Вы должны вызвать rdr.IsDBNull(column)
, чтобы определить, имеет ли значение DbNull
.
Ответ 4
Измените null
на DBNull.Value
.
Ответ 5
Вы также можете сделать:
If (string.IsNullOrEmpty(rdr.GetString("timeOut"))
Ответ 6
Вы можете сравнить объект, который извлекается из поля NULL с помощью DBNull.Value.
Ответ 7
Здесь мне нравится:
var MyString = rdr["column"] is DBNull ? "It null!" : rdr.GetString("column");
Например (для первоначального требования):
queryResult.Egresstime = rdr["timeOut"] is DBNull ? "Logged in" : rdr.GetString("timeOut");