我在SQL Server 2008中有一个存储过程:
ALTER proc [dbo].[Get_Total]
@ID int
as
select Total
from Order_details
where Id_order = @ID
如果有多行,我想得到行的总和,所以我尝试用for循环
for (int i = 0; i < set.Tables[1].Rows.Count; i++)
{
Total.Text += Convert.ToInt32(set.Tables[1].Rows[i][0]).ToString();
}
但它不起作用,它会返回一大笔金额,因此循环没有停止。
请帮忙!
答案 0 :(得分:1)
为什么不在数据库中总结:
select Sum(Total) from Order_details
where Id_order = @ID
虽然这表明您的架构设计存在问题....
答案 1 :(得分:1)
在SQL中执行求和:
ALTER proc [dbo].[Get_Total] (
@ID int
)
as
begin
select sum(Total) as Total
from Order_details
where Id_order = @ID;
end;
我不知道你为什么要这样做作为存储过程。您可以轻松地将其作为用户定义的函数执行 - 然后更容易获得结果。
答案 2 :(得分:0)
问题是,你在这里进行string
连接,这可能会给你一个大的连接数而不是Sum
。
你可以这样做。
int value= 0;
for (int i = 0; i < set.Tables[1].Rows.Count; i++)
{
value += Convert.ToInt32(set.Tables[1].Rows[i][0]);
}
Total.Text = value.ToString();
另一种简单的方法,使用Linq
。
Total.Text = set.Tables[1].AsEnumberable()
.Select(row=>int.Parse(row[0]))
.Sum()
.ToString();