Как проверить на наличие NULL в MySQldatareader по имени колонн?
-
12-10-2019 - |
Вопрос
Как я могу проверить на NULL
ценность в открытом MySqlDataReader
?
Следующее не работает; это всегда бьет else
:
if (rdr.GetString("timeOut") == null)
{
queryResult.Egresstime = "Logged in";
}
else
{
queryResult.Egresstime = rdr.GetString("timeOut");
}
rdr.IsDbNull(int i)
принимает только номер столбца, а не имя.
Решение
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
Другие советы
if (rdr.getString ("timeout") == dbnull.value)
null
не то же самое, что DBNull
Извините, неправильный ответ, Сэм Б прав. Я принял это за DataRow
вещи.
SqlDatareader сильно напечатал GetString()
и обеспечивает IsDBNull(int column)
для этого случая.
Вы должны позвонить rdr.IsDBNull(column)
Чтобы определить, является ли значение DbNull
.
Вы можете сравнить объект, который отслеживает с нулевого поля с Dbnull.value.
Изменять null
к DBNull.Value
.
Вы также можете сделать:
If (string.IsNullOrEmpty(rdr.GetString("timeOut"))
Вот тот, который мне нравится:
var MyString = rdr["column"] is DBNull ? "It's null!" : rdr.GetString("column");
Например (Для первоначального требования):
queryResult.Egresstime = rdr["timeOut"] is DBNull ? "Logged in" : rdr.GetString("timeOut");
Вот метод, который я создал для чтения DBNull
и вернуть а default(T)
в случае:
private T GetNullable<T>(MySqlDataReader reader, int ordinal, Func<int, T> getValue)
{
if (reader.IsDBNull(ordinal))
{
return default(T);
}
return getValue(ordinal);
}
Это можно использовать так:
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);
}
Общий тип T
будет разрешено на основе возврата reader.
- Метод. Если вернет строку, вы получите null
в случае DBNull
. Анкет Если это int
он вернется 0
, так далее.
Примечание. Для целочисленных значений не желательно получить 0
так что будьте осторожны.