【问题标题】:Why this method that execute this simple query give me a wrong result?为什么执行这个简单查询的方法给我一个错误的结果?
【发布时间】:2014-03-21 15:50:15
【问题描述】:

我有以下问题。

我有这个 Microsoft SQL Server 查询:

Select AVG(Severity) AS 'Average Severity' from VulnerabilityAlertDocument

在 Microsoft SQL Server Management Studio 中执行,返回给我这个浮点数:7,34792844929602

现在我正在尝试创建一个 C# 方法来简单地实现这个查询并返回获得的值,所以我做了这样的事情:

    public double getVulnerabilitySeverityAverage()
    {
        double vulnerabilitySeverityAverage;

        _strSQL = "Select AVG(Severity) AS 'Average Severity' from VulnerabilityAlertDocument";

        System.Data.Common.DbCommand command;
        command = _connection.CreateCommand();
        command.CommandText = _strSQL;

        vulnerabilitySeverityAverage = command.ExecuteNonQuery();

        return vulnerabilitySeverityAverage;
    }

问题是当前面的方法执行时,vulnerabilitySeverityAverage的结果值不是预期值(7,34792844929602),而是错误的值:-1.0

为什么?有什么问题?我错过了什么?

Tnx

【问题讨论】:

    标签: c# asp.net .net sql-server


    【解决方案1】:

    来自SqlCommand.ExecuteNonQuery method

    对于 UPDATE、INSERT 和 DELETE 语句,返回值为 受命令影响的行数。当触发器存在于 正在插入或更新的表,返回值包括数字 受插入或更新操作和数量影响的行数 受触发器或触发器影响的行数。 对于所有其他类型的 语句,返回值为-1

    由于您的查询是SELECT 语句,所以..

    作为一种解决方案,您可能需要使用ExecuteScalar method,它将结果中第一行的第一列作为object 返回。

    vulnerabilitySeverityAverage = (double)command.ExecuteScalar();
    

    【讨论】:

    • 如果人们真的看看优秀的、免费的文档就好了!
    • @marc_s 阿门.. 有时我真的很犹豫是否应该将此信息添加为评论或答案。因为可以在 30 秒内找到解决方案来查看他们的文档。这让我感觉很糟糕。
    【解决方案2】:

    尝试使用command.ExecuteScalar()方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 2012-06-13
      相关资源
      最近更新 更多