【问题标题】:C# ADO.NET - return sum of one columns in tableC# ADO.NET - 返回表中一列的总和
【发布时间】:2013-05-22 16:32:17
【问题描述】:

在我的数据库表中,我有一个名为“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,我将非常感激。

【问题讨论】:

  • 您正在使用 SqlCommand 执行什么 SQL?
  • returnValue = (int)sqlComm.ExecuteScalar(); 放入try-catch,看看你得到了什么异常

标签: c# ado.net executescalar


【解决方案1】:

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

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

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

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

【讨论】:

  • @CSharpBeginner:不客气!如果您的问题已得到解答,您可以通过投票/标记为“最佳答案”来表明最有用的答案。
【解决方案2】:
Select Coalesce(Sum(Cena), 0) From Ksiazki

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

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

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

【讨论】:

  • 非常感谢,现在我明白我的错误了。
【解决方案3】:

在你的代码最后一行

returnValue = (int)sqlComm.ExecuteScalar();

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

【讨论】:

    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多