2010-11-26 15 views
0

任意の値を指定していないSQLクエリは値を与えません

using (SqlCommand cmd = new SqlCommand("SELECT SUM(Paied) FROM Debt", new SqlConnection(Program.ConnectionString))) 
      { 
       cmd.Connection.Open(); 
       SqlDataReader myReader = cmd.ExecuteReader(); 
       while (myReader.Read()) 
       { 
        TotalPaiedAll = Convert.ToDecimal(myReader["Paied"].ToString()); 
       } 
       cmd.Connection.Close(); 
      } 
+2

コードを再フォーマットし、いくつかの質問を受け入れてください。 – demas

+0

私たちは助けて助けに来ていますね。 – KBoek

答えて

3

値が得られない理由は、SUM(Paied)が匿名の列を生成し、Paiedという列を生成しないためです。ここで

はあなたの問題を修正する簡単な方法です:

 using (SqlCommand cmd = new SqlCommand("SELECT SUM(Paied) As SumOfPaid FROM Debt", new SqlConnection(Program.ConnectionString))) 
     { 
      cmd.Connection.Open(); 
      SqlDataReader myReader = cmd.ExecuteReader(); 
      while (myReader.Read()) 
      { 
       TotalPaiedAll = Convert.ToDecimal(myReader["SumOfPaid"].ToString()); 
      } 
      cmd.Connection.Close(); 
     } 

そして、ここでより良いアプローチである、ExecuteScalarメソッド使用:

 using (SqlCommand cmd = new SqlCommand("SELECT SUM(Paied) As SumOfPaid FROM Debt", new SqlConnection(Program.ConnectionString))) 
     { 
      cmd.Connection.Open(); 
      TotalPaiedAll = (decimal)cmd.ExecuteScalar(); 
      cmd.Connection.Close(); 
     } 
+0

それはとてもシンプルだった!しかし、私は一見して質問を見たときにそれを得ない。+1 –

4

はあなたのSQLクエリはまた

SELECT SUM(Paied) AS Paied FROM Debt

である必要があり、それは任意の値

を与えていない
+0

うわー、あなたは実際にそれを読んでいますか? +1精神のため – slezica

1

使用は、ExecuteScalarを使用することができます実行者:

decimal sum =(decimal) cmd.ExecuteScalar(); 

合計は単なる値なので、whileループを実行する際には意味がありません。

0

ないバグをしかし、あなたはまた、SQLを保護する必要があります漏れとの接続。

関連する問題