C#ADO.NET - 返回表中一列的总和

时间:2013-05-22 16:32:17

标签: c# ado.net executescalar

在我的数据库表中,我有一个名为“Cena”的列,其类型为Integer。我需要对这些列进行SUM计算,以计算表格的整个“Cena”。

要做到这一点,我正在使用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,我会非常感激。

3 个答案:

答案 0 :(得分:3)

当表为空时,您的SQL查询返回NULL。您无法将此返回值强制转换为int,这就是C#抛出错误的原因。

如果您正在使用SQL Server,则可以检查NULL并在数据库中替换为0。

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

您还可以使用Coalesce,这是Isnull的更一般形式(实际上是SQL标准的一部分)。

答案 1 :(得分:2)

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

因为空结果集上的sum将返回null

int不能是null(并将结果转换为int)

如果您从coalesce获得null,则SUM运算符将返回0

答案 2 :(得分:0)

在你的代码最后一行

returnValue = (int)sqlComm.ExecuteScalar();

是罪魁祸首,您正在尝试将null解析为int。这就是你的代码抛出异常的原因。在解析之前,您应该检查对象是否为空。您可以使用try和catch来防止意外错误。