2016-04-07 6 views
3

ich diesen Code bin mit:Sum SQL-Spalten mit float (C#)

SqlConnection con = new SqlConnection(@"Data Source=(local);Initial  
Catalog=dbsoft;Integrated Security=True"); 
con.Open(); 
SqlCommand cmd = new SqlCommand("SELECT SUM(price) FROM fiscal"); 
cmd.Connection = con; 
int sum = cmd.ExecuteScalar(); 
label3.Text = sum.ToString(); 
con.Close(); 

erhalte ich diese Fehlermeldung:

kann nicht implizit Typ 'Objekt' zu 'int' konvertieren. Eine explizite Konvertierung existiert (fehlt Ihnen eine Besetzung?)

Habe ich etwas übersehen?

Antwort

4

SqlCommand.ExecuteScalar gibt ein Objekt zurück, das Sie in den gewünschten Typ konvertieren müssen. Wenn Sie erwarten, dass Ihr SUM vom Typ float in DB ist, dann verwenden Sie double seit float in SQL Server maps bis double in C#. wie:

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

Sehen Sie sich auch Ihr SqlConnection und SqlCommand Objekt es using statement umschließt, die Ressource zur Verfügung stellt sicher, auch im Fall einer Ausnahme.

+0

tut Noch work.Shoud ich benutze Cast? SqlConnection con = neue SqlConnection (@ "Datenquelle = (lokal); Erster Katalog = dbsoft; Integrierte Sicherheit = True"); con.Open(); SqlCommand cmd = neuer SqlCommand ("SELECT SUM (Preis) FROM fiscal"); cmd.Verbindung = con; doppelte Summe = (double) cmd.ExecuteScalar(); label3.Text = sum.ToString(); con.Close(); – DmO

+1

@DmO, was ist, wenn Sie versuchen, doppelte Summe = Convert.ToDouble (cmd.ExecuteScalar); – Habib

1

Wenn Preise zusammenfassend wie 12.34, 56.78 usw. wir Punktwert Floating erhalten erwarten. Im Falle von Geld ist Decimal eine typische Wahl (statt int):

... 
    // Convert.ToDecimal - let .Net convert, not just cast; 
    // what if, say, String has been returned? 
    Decimal sum = Convert.ToDecimal(cmd.ExecuteScalar()); // Decimal sum 

    label3.Text = sum.ToString(); 

Umsetzung:

String connString = @"Data Source=(local);Initial  
Catalog=dbsoft;Integrated Security=True"; 

// Wrap IDisposable into using 
using (SqlConnection con = new SqlConnection(connString)) { 
    con.Open(); 

    // Wrap IDisposable into using 
    using (SqlCommand cmd = new SqlCommand(
    @"SELECT SUM(price) 
     FROM fiscal")) { 

    cmd.Connection = con; 

    Decimal sum = Convert.ToDecimal(cmd.ExecuteScalar()); // Decimal sum 

    label3.Text = sum.ToString(); 

    // or 
    // Shortcut - you have no need in additional convert/cast 
    //label3.Text = Convert.ToString(cmd.ExecuteScalar()); 
    } 
}