J.Karthick Ответов: 4

DBNULL не очень хорошо валидируется


Привет,

В моем приложении я проверяю условия следующим образом, но это, кажется, не очень хорошо валидируется(всегда мой блок catch получал исключение).

if (dtable.Rows[0]["VAT"] != System.DBNull.Value) //Exception here while it returns DBNULL
                       dreturns = Convert.ToDecimal(dtable.Rows[0]["VAT"]);
                   else
                       dreturns = 0;


Любая помощь будет оценена по достоинству.



Пойманная ошибка-это :

Error : System.NullReferenceException: Object reference not set to an instance of an object.

Sushil Mate

Надеюсь, этот столик не пустует? можете ли вы определить значение этой таблицы?

J.Karthick

Да....Вот что я проверяю в этом состоянии.Независимо от того, пусто оно или нет

Ed Nutting

Нет, он имеет в виду, действительно ли у него есть какие - либо строки в таблице-если их нет, то попытка получить значение НДС для строки 0 не сработает и вызовет исключение, которое вы получаете. Чтобы проверить, пуста ли таблица, попробуйте сделать: dtable.Rows.Count > 0 (Я не могу проверить это, но это будет похоже на это. Может быть и так Count это метод, и поэтому его нужно называть единым целым.

Надеюсь, это поможет,
Эд

J.Karthick

Я вставил свое фактическое решение. Пожалуйста, проверьте это.

Спасибо за ваши комментарии

4 Ответов

Рейтинг:
26

J.Karthick

dreturns = 0;
if ( dtable != null && dtable.Rows.Count > 0 )
{
    if (dtable.Rows[0]["VAT"] != System.DBNull.Value)
        dreturns = Convert.ToDecimal(dtable.Rows[0]["VAT"]);
}


разве это решение я переживу?


В любом случае спасибо членам КП за их поддержку.


Рейтинг:
1

Haneef Shaik

if (!DBNull.Value.Equals(dtable.Rows[0]"VAT"])                        
                      dreturns = Convert.ToDecimal(dtable.Rows[0]["VAT"]);
                   else
                       dreturns = 0;


J.Karthick

да...ее также еще один способ, чтобы сделать это.

Спасибо

Рейтинг:
0

Bernhard Hiller

Вам нужно проверить, вернул ли оператор строку вообще:

dreturns = 0;
if (dtable.Rows.Count > 0)
{
    if (dtable.Rows[0]["VAT"] != System.DBNull.Value)
        dreturns = Convert.ToDecimal(dtable.Rows[0]["VAT"]);
}


ProEnggSoft

Это правильное решение. Комментарий выше Эда Наттинга также указывает на то же самое. Мой 5.

J.Karthick

Нет....Я этого не принимаю.

Если моя таблица dtable имеет значение "NULL", то как я могу проверить количество строк ???

Даже я уже пытался это сделать.

Рейтинг:
0

sambac8888

Try comparing the value of the column to the DBNull.Value value to filter and manage null values in whatever way you see fit.

foreach(DataRow row in dtable.Rows)
{
    object value = row["VAT"];
    if (value == DBNull.Value)
        // do something
    else
        // do something else
}


Richard Deeming

ШЕСТЬ ЛЕТ слишком поздно. У этого вопроса уже есть пара очень похожих решений - кроме вашего изменяет поведение кода.