c# ADO.返回表中一列的和
本文关键字:一列 ADO 返回 | 更新日期: 2023-09-27 18:14:57
在我的数据库表中,我有一个名为"Cena"的列,类型为Integer。我需要对这些列求和,以计算整个表的"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。
当表为空时,SQL查询返回NULL。您不能将此返回值强制转换为int
,这就是c#抛出错误的原因。
如果你使用的是SQL Server,你可以在数据库中检查NULL并替换为0。
Select Isnull(Sum(Cena), 0) From Ksiazki
您还可以使用Coalesce
,这是Isnull
的更一般形式(并且实际上是SQL标准的一部分)。
Select Coalesce(Sum(Cena), 0) From Ksiazki
因为sum
对空结果集将返回null
。
int不能是null
(并且将结果强制转换为int)
如果从SUM
null
,则coalesce
运算符返回0在代码的最后一行
returnValue = (int)sqlComm.ExecuteScalar();
是罪魁祸首,您试图将null解析为int。这就是为什么你的代码抛出异常。在解析它之前,应该检查它的对象是否为空。可以使用try和catch来防止不必要的错误。