проблема с нулевым столбцом - PullRequest
1 голос
/ 19 мая 2010

Один столбец в моей базе данных (типа double) имеет несколько нулевых значений. Я выполняю скучную процедуру для получения данных в моем приложении

 wipDBTableAdapters.XLSFacturiTableAdapter TAFacturi = new wipDBTableAdapters.XLSFacturiTableAdapter();
               var dtfacturi = TAFacturi.GetData(CodProiect);

Тогда я пытаюсь сделать что-то вроде этого:

if (dtfacturi[i].CANTITATE == null)
   {
    //do something
   }

это предупреждение:

The result of the expression is always 'false' since a value of type 'double' is never equal to 'null' of type 'double?

Однако, когда я запускаю свой код, я получаю следующее исключение:

StrongTypingException
The value for column 'CANTITATE' in table 'XLSFacturi' is DBNull. 

Как мне решить эту проблему?

Ответы [ 6 ]

3 голосов
/ 19 мая 2010

При работе с данными в БД и необходимости проверки значений NULL используйте DBNull класс вместо .NET null.

1 голос
/ 19 мая 2010

Значение типа «double» действительно никогда не равно нулю; если вы хотите экспортировать в массив значений типа double, вам необходимо иметь два столбца в базе данных, один из которых содержит данные, а другой - флаг о том, действительны ли данные.

Это действительно ошибка в вашем коде адаптера базы данных к массиву; Я не могу найти хиты Google для XLSFacturiTableAdapter, поэтому я не уверен, на кого кричать.

1 голос
/ 19 мая 2010

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

if (dtfacturi[i].CANTITATE == DBNull.Value)
{
  //do something
}
1 голос
/ 19 мая 2010

NULL базы данных отличаются от null, для проверки NULL базы данных следует использовать IsDBNull.

Редактировать: перепутал VB.Net с C #

Сравните с DBNull.Value, а не с VB IsDBNull.

0 голосов
/ 27 мая 2010

При использовании TypedDataSets проверьте, имеет ли столбец значение NULL.

   if (dtfacturi[i].IsCANTITATENull()) 
   { 
       //do something 
   } 

Также обратите внимание, что C # null отличается от Database null. Тип столбца double - тип значения, который никогда не может быть нулевым. Чтобы проверить, является ли ваше значение столбца нулевым, вам нужно сравнить его с DBNull.Value.

0 голосов
/ 19 мая 2010

DBNull не null

Проверка Документация DBNull на MSDN

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

if (DBNull.Value.Equals(dtfacturi[i].CANTITATE))
{
    //do something
}
...