Проверка DBNull для ExecuteScalar

Хранимая процедура для команды может возвращать значение null. Это правильный способ проверить, является ли возвращаемое значение нулевым, или мне также следует проверить, что obj имеет значение null?

object obj = command.ExecuteScalar();
int id = -1;
if (DBNull.Value == obj)
{
   id = Convert.ToInt32(obj );
}

person Yakov    schedule 15.01.2014    source источник
comment
Execute scalar всегда будет возвращать универсальный объект. Следовательно, было бы лучше проверить значение null перед проверкой значения объекта.   -  person Venkatesh Ellur    schedule 15.01.2014


Ответы (3)


Вы, вероятно, захотите изменить свой if-оператор на

if (obj != null && DBNull.Value != obj) { 
    ... 
}

Прямо сейчас вы пытаетесь преобразовать obj == DBNull.Value.

person Dennis Traub    schedule 15.01.2014

Если результата нет, ваш запрос может вернуть null, поэтому в общем случае вы должны его проверить. Например.:

SELECT TOP 1 Col1 FROM TABLE WHERE ...

Вышеупомянутый запрос может вернуть:

  • null, если нет строк, соответствующих предложению WHERE
  • DBNull.Value, если первая совпадающая строка имеет значение NULL в столбце Col1
  • иначе ненулевое значение

Если ваш запрос таков, что вы можете гарантировать, что всегда будет результат, вам нужно только проверить DBNull. Например.

SELECT MAX(Col1) FROM TABLE WHERE ...

Вышеупомянутый запрос вернет DBNull.Value, если нет строк, соответствующих предложению WHERE. Он никогда не возвращает null.

И, конечно, есть некоторые случаи, когда вы можете гарантировать ненулевой результат, и в этом случае вам не нужно проверять на null или DBNull. Например.

SELECT COUNT(Col1) FROM TABLE WHERE ...
SELECT ISNULL(MAX(Col1),0) FROM TABLE WHERE ...

Вышеупомянутый запрос всегда будет возвращать ненулевое значение. Он никогда не возвращает null или DBNull.Value.

person Joe    schedule 15.01.2014

Используйте 1_. проверьте эту ссылку http://msdn.microsoft.com/en-us/library/system.dbnull%28v=vs.110%29.aspx.

Попробуй это :

if(DBNull.Value != obj)
{
 ....
 .... 
}  

Вот разница между Null и DBNull. В чем разница между null и System.DBNull.Value ?

person Ajay    schedule 15.01.2014