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。

c# ADO.返回表中一列的和

当表为空时,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来防止不必要的错误。