C# ADO.NET - return sum of one columns in table
在数据库的表中,有一个名为"cena"的列,其类型为整数。我需要对这些列进行合计,以计算整个表的"cena"。
为此,我使用了sqlcommand和executescalar()方法。
1 2 3 4 5 6 7 8 | 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,我会非常感激。
当表为空时,SQL查询将返回空值。您不能将这个返回值强制转换为
如果您使用的是SQL Server,则可以检查是否为空并在数据库中替换为0。
1 | Select Isnull(Sum(Cena), 0) From Ksiazki |
您还可以使用
1 | Select Coalesce(Sum(Cena), 0) From Ksiazki |
因为空结果集上的
int不能是
如果从
在代码的最后一行
1 | returnValue = (int)sqlComm.ExecuteScalar(); |
是罪魁祸首,您试图将空值解析为int。这就是您的代码引发异常的原因。在分析到is之前,您应该检查is object是否为空。您可以使用"尝试并捕获"来防止不必要的错误。