我有一个存储过程CalculateTotal,用于返回表Spendings中Amount列中所有记录的总和

`CREATE PROCEDURE CalculateTotal
 @Name varchar(50),
 @Month int
 @year
 As
 SELECT SUM(Amount) As Total
 FROM Spendings
 WHERE MONTH(Date) = @Month AND YEAR(Date)= @Year AND Name = @Name`

当我从SQLServer执行此过程时,执行成功并返回总数,
我需要从C#中获取Total的值,我尝试了下面的代码,
public void CalculateTotal(string name, int month , int year)
 {
     cmd = connection.CreateCommand();
     cmd.CommandText = "EXECUTE CalculateTotal @Name,@Month,@Year";
     cmd.Parameters.AddWithValue("@Name", name);
     cmd.Parameters.AddWithValue("@Month", month);
     cmd.Parameters.AddWithValue("@Year", year);
     reader = cmd.ExecuteReader();
     if(reader.HasRows)
     {
           while (reader.Read())
           {
               int total = (int)reader["Total"];
           }
      }
}

当我调试它时,“While”条件为true,当“While”循环的主体执行时,遇到一个名为indexAutoFrangeException:Total的错误
如何在c中检索SUM函数的值#

最佳答案

通过ADO从SQL Server返回单个值时,我建议您使用ExecuteScalar。用法示例:

    Int32 total= (Int32)cmd.ExecuteScalar();

还请查看using模式的实现,以确保不会导致内存泄漏。

关于c# - 如何通过C#检索SQL中SUM函数的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29556196/

10-12 07:29
查看更多