vijay_bale Ответов: 1

Ошибка приходит в C#


Я пытаюсь суммировать количество некоторых элементов, поэтому я написал один для цикла.
для этого я взял max of itemid и min of itemid с помощью sql quey и executescalar (), а также Эти два значения, хранящиеся в переменных numlow и numhigh.
Я сохраненное значение numlow в "я" и "я" я использую в цикле for.
когда я запускаю код все в порядке как показано ниже
<pre> for (int i = lownum; i<= highnum; ++i)
            {
                con.Close();
con.Open();

SqlCommand qty = new SqlCommand("select itmqty from invDB where itemid='"+i+"'", con);
                double quant = Convert.ToDouble(qty.ExecuteScalar());

when I added sum() to that itmqty like sum(itmqty) it is showing error
. Некоторые, где количество также равно нулю.
Ошибка есть "
Object cannot be cast from DBNull to other types"


Что я уже пробовал:

Я погуглил, но не нашел подходящих результатов.

ZurdoDev

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

Напишите sql-запрос, который делает что-то вроде этого
Выберите SUM (itemqty) в качестве TotalSum
Из someTable
Где идентификаторы от 1 до 100

и тогда нет никакой петли.

G3Coder

Привет,

Не вдаваясь в подробности того, что вы опубликовали, попробуйте использовать предложение group by в вашем SQL.

Г

1 Ответов

Рейтинг:
2

OriginalGriff

Ваш запрос не возвращает никаких значений.
Используйте отладчик для подтверждения значения i, и вручную проверьте свою БД, чтобы убедиться, что данные являются тем, что вы ожидаете.

Если ваш запрос не возвращает никаких значений, ExecuteScalar возвращает DbNull - и вы не можете преобразовать его в double.
Если предполагается, что он работает без совпадающих значений, то вам нужно проверить наличие null, прежде чем пытаться привести возвращаемое значение.