2010-11-26 11 views
0

es keinen Wert hat nichtSQL-Abfrage geben keinen Wert

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

Bitte formatieren Sie Ihren Code neu und akzeptieren Sie einige Ihrer Fragen. – demas

+0

nun, wir sind hier, um zu helfen und geholfen zu werden, nicht wahr? – KBoek

Antwort

3

Der Grund, warum Sie keinen Wert erhalten, ist, weil SUM(Paied) eine anonyme Spalte generiert, nicht eine Spalte namens Paied.

Hier ist eine einfache Lösung für Ihr Problem:

 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(); 
     } 

Und hier ist ein besserer Ansatz, die ExecuteScalar Methode:

 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

Es war so einfach! Aber ich verstehe es nicht, als ich die Frage auf den ersten Blick sah. +1 –

4

Ihre SQL-Abfrage

SELECT SUM(Paied) AS Paied FROM Debt

Alternativ sollte, könnten Sie

SELECT SUM(Paied) AS Paied FROM Debt 

TotalPaiedAll = (decimal) cmd.ExecuteScalar(); 
+0

Wow, hast du das wirklich gelesen? +1 für den Geist – slezica

1

Verwendung ExecuteScalar anstelle executeerader:

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

Es macht keinen Sinn, eine while-Schleife zu erstellen, da die Summe nur ein einzelner Wert ist.

0

Ihr Fehler nicht, aber Sie müssen auch die SQL schützen Verbindung gegen Leckage.