Как DBNull может не равняться DBNull - PullRequest
7 голосов
/ 13 января 2010

У меня есть следующая строка кода

if (DBNull.Value.Equals(o) || o != null)

, где o равно object o in row.ItemArray Я получаю сообщение об ошибке ->

Xml type "List of xdt:untypedAtomic" does not support a conversion from Clr type "DBNull" to Clr type "String".

Что я не понимаю, так это то, что когда я выполняю свой код, if должен поймать это и выполнить альтернативное действие, но это не так?

Может кто-нибудь, пожалуйста, пролить немного света для меня.

Спасибо!

Ответы [ 3 ]

6 голосов
/ 14 января 2010

Я думаю, что проблема в том, что на самом деле

DBNull.Value == null 
//is always false

DBNull - это специальный класс для сравнения значений, возвращаемых из дБ, поэтому вам действительно необходимо проверить наличие нулевого условия И DBNull.value, если ваш массив содержит оба.

РЕДАКТИРОВАТЬ: Извините, глядя на ваш код, вам, возможно, просто нужно отменить операцию ИЛИ. Если o == null, ваше первое утверждение будет взорвано вашим исключением. Попробуйте:

if (o != null || o == DBNull.Value) 
6 голосов
/ 14 января 2010

Попробуйте использовать

Convert.IsDBNull метод.

1 голос
/ 14 января 2010

может быть такое сравнение помогает

if ( !o.GetType().Equals( DBNull.Value ) )

или

if (o is DBNull)
...