так что будьте осторожны.

могу проверитьNULL ценность в открытомMySqlDataReader?

Следующее не работает; это всегда поражаетelse:

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

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

Ответы на вопрос(8)

который я создал, чтобы прочитать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 так что будьте осторожны.

If (string.IsNullOrEmpty(rdr.GetString("timeOut"))

 VoodooChild19 янв. 2011 г., 20:42
@ rd42: так каково действительное значение в этом поле при отладке? просто любопытно?
 rd4219 янв. 2011 г., 20:35
Имеет тот же эффект, что и (rdr.GetString ("timeOut") == null)
 rd4219 янв. 2011 г., 21:21
Значение: 7.12.2010 10:16:46 Спасибо за вашу помощь.

Вот тот, который мне нравится:

var MyString = rdr["column"] is DBNull ? "It's null!" : rdr.GetString("column");

Например. (для первоначального требования):

queryResult.Egresstime = rdr["timeOut"] is DBNull ? "Logged in" : rdr.GetString("timeOut");

null это не то же самое, чтоDBNull

Извините, неправильный ответ, Сэм Б прав. Я принял это заDataRow вещи.

SqlDataReader имеет строго типизированныйGetString() и обеспечиваетIsDBNull(int column) для этого случая.

 rd4219 янв. 2011 г., 21:20
Спасибо за помощь, хотя.
 Sam B19 янв. 2011 г., 20:37
-1: строка не может сравниваться с DBNull.Value.
 rd4219 янв. 2011 г., 20:33
Вот что я получаю Ошибка 1: Оператор '==' не может быть применен к операндам типа 'string' и 'System.DBNull'
 Axarydax19 янв. 2011 г., 20:26
@BoodooChild - спасибо
 VoodooChild19 янв. 2011 г., 20:25
Я думаю, что это должно бытьDBNull.Value

null вDBNull.Value.

 rd4219 янв. 2011 г., 20:35
Вот что я получаю Ошибка 1: Оператор '==' не может быть применен к операндам типа 'string' и 'System.DBNull' -

rdr.IsDBNull(column) определить, является ли значениеDbNull.

Решение Вопроса
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
 Viacheslav Ivanov03 авг. 2016 г., 07:47
@ 4mla1fn Спасибо, я отредактировал свой ответ.
 rd4219 янв. 2011 г., 20:42
Вы - Победитель своего собственного зеленого чека. Я использовал второй. Спасибо!
 4mla1fn02 авг. 2016 г., 21:09
Небольшая опечатка во втором примере: измените «IsDbNull» на «IsDBNull»

Ваш ответ на вопрос