2

在我的数据库表中,我有一个名为“Cena”的列,其类型为整数。我需要对这些列求和以计算表的整个“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,我将非常感激。

4

3 回答 3

3

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

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

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

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

于 2013-05-22T16:35:51.923 回答
2
Select Coalesce(Sum(Cena), 0) From Ksiazki

因为sum在一个空的结果集上会返回 null.

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

如果coalescenullSUM

于 2013-05-22T16:35:17.203 回答
0

在你的代码最后一行

returnValue = (int)sqlComm.ExecuteScalar();

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

于 2013-05-22T16:47:33.710 回答