Подтвердить что ты не робот

Как проверить NULL в MySqlDataReader по имени столбца?

Как проверить значение NULL в открытом MySqlDataReader?

Не работает следующее: он всегда нажимает else:

if (rdr.GetString("timeOut") == null)
{
    queryResult.Egresstime = "Logged in";
}
else
{
    queryResult.Egresstime = rdr.GetString("timeOut");
}

rdr.IsDbNull(int i) принимает только номер столбца, а не имя.

4b9b3361

Ответ 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");