2013-05-22 1 views
2

В моей таблице в databse у меня есть столбец под названием «Cena» с типом Integer. Мне нужно использовать эти столбцы для подсчета всей «Cena» таблицы.C# ADO.NET - возвращает сумму одного столбца в таблице

Для этого я использую SqlCommand и метод ExecuteScalar().

string sqlString = string.Format("Select Sum(Cena) From Ksiazki"); 
int returnValue ; 

SqlCommand sqlComm = new SqlCommand(); 
sqlComm.CommandText = sqlString; 
sqlComm.Connection = sqlConn; 

returnValue = (int)sqlComm.ExecuteScalar(); 

Он отлично работает до тех пор, как я получил какую-либо запись в таблице, но когда моя таблица в базе данных пуста он выходит из строя.

Честно говоря, я понятия не имею, почему это происходит так, поэтому я был бы очень благодарен, если кто-то может сказать мне, что случилось, когда таблица пуста, и почему он просто не возвращает 0.

+0

Какой SQL вы выполняете с помощью SqlCommand? – voithos

+0

Поместите 'returnValue = (int) sqlComm.ExecuteScalar();' в 'try-catch' и посмотрите, какое исключение вы получите – oleksii

ответ

3

Ваш SQL запроса возвращает NULL, когда таблица пустой. Вы не можете отбросить это возвращаемое значение до int, поэтому C# выдает ошибку.

Если вы используете SQL Server, вы можете проверить NULL и заменить на 0 в базе данных.

Select Isnull(Sum(Cena), 0) From Ksiazki 

Вы также можете использовать Coalesce, который является более общий вид Isnull (и на самом деле является частью стандарта SQL).

+0

Спасибо вам также! – CSharpBeginner

+0

@CSharpBeginner: Добро пожаловать! Если на ваш вопрос был дан ответ, вы можете указать это, добавив/обозначив как «лучший ответ» ответ, который был наиболее полезен. – voithos

2
Select Coalesce(Sum(Cena), 0) From Ksiazki 

Потому что sum на пустой результирующий набор вернет null.

INT не может быть null (и вы приводите свой результат на межд)

Оператор coalesce возвратит 0, если вы получаете null от SUM

+0

Большое спасибо, теперь я понимаю свою ошибку. – CSharpBeginner

0

В коде последней строке

returnValue = (int)sqlComm.ExecuteScalar(); 

является виновником, вы пытаетесь парсер нуль в междунар. Вот почему ваш код генерирует исключение. Перед синтаксическим анализом вы должны проверить, что объект имеет значение null. Вы можете использовать try и catch для предотвращения нежелательной ошибки.