2016-04-07 11 views
-1

の合計を収集します。C#が、私は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

問題は、ここで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(); 

もう1つの簡単な方法は、Linqです。

Total.Text = set.Tables[1].AsEnumberable() 
          .Select(row=>int.Parse(row[0])) 
          .Sum() 
          .ToString(); 
1

データベースにまとめるない理由:

select Sum(Total) from Order_details 
where Id_order = @ID 

それがあなたのスキーマ設計に問題があることを示唆しているが....

1

はSQLで合計を実行します。

ALTER proc [dbo].[Get_Total] (
    @ID int 
) 
as 
begin 
    select sum(Total) as Total 
    from Order_details 
    where Id_order = @ID; 
end; 

を私はなぜこれをストアドプロシージャとして行うのか分かりません。代わりにユーザー定義関数としてこれを簡単に行うことができます。結果を得るのが簡単です。

関連する問題