Ошибка DBNull при добавлении нового столбца в таблицу данных - PullRequest
0 голосов
/ 20 марта 2020

Я знаю, что уже много сообщений об этом, но я не нашел ничего, что помогло бы мне понять или исправить мою проблему. У меня есть база данных, заполняющая данные. Я сейчас пытаюсь добавить новый столбец и установить значение строки столбца равным 1 или 0 в зависимости от небольшой формулы ниже:

dt.Columns.Add("pViolation");

foreach (DataRow row in dt.Rows)
{
    /*exception thrown here*/ if (Convert.ToDecimal(row["oPrice"]) < Convert.ToDecimal(row["pPrice"]))
    {
        row["pViolation"] = 1;
    }
    else
    {
        row["pViolation"] = 0;
    }
}

Я получаю эту ошибку:

System.InvalidCastException: «Объект не может быть приведен из DBNull к другим типам.»

Столбцы oPrice и pPrice уже заполнили десятичные значения для каждого столбца, поэтому я не приведение их от нуля до десятичного числа. Может кто-нибудь сказать мне, что я делаю не так?

1 Ответ

1 голос
/ 20 марта 2020

Выдает исключение, потому что либо row["oPrice"], либо row["pPrice"] равно нулю в базе данных.

Сначала вы можете проверить на нулевое значение, но вам нужно решить, как обрабатывать нулевые значения:

// check if either value is null
if (row["oPrice"] == DBNull.Value || row["pPrice"] == DBNull.Value)
{
    // what do you want to do when one value (or both values) is null?
}
else if (Convert.ToDecimal(row["oPrice"]) < Convert.ToDecimal(row["pPrice"]))
{
    row["pViolation"] = 1;
}
else
{
    row["pViolation"] = 0;
}
...