C # SQL valore SUM su un’etichetta

Attualmente ho un DataGridView che visualizza tutto l’articolo. Vorrei sumre tutti i prezzi nella colonna del prezzo e quindi riflettere il totale in un’etichetta, “TotalValueLabel”. Cosa c’è di sbagliato nella mia affermazione?

string query = "SELECT SUM (Price) FROM Bill"; OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, DBconn); DataTable source = new DataTable(); dAdapter.Fill(source); TotalValueLabel.Text = source.ToString(); 

La tua fonte è una DataTable così ” source.ToString() ” non ti darà il risultato,

Prova ” source.Rows[0][0].ToString(); “.

L’object DataTable contiene un elenco di oggetti DataRow che contengono valori per ogni riga del risultato della query.

Nel tuo caso tuttavia potresti non averne bisogno. Se stai cercando un singolo valore, dovresti usare IDbCommand e chiamare ExecuteScalar() . Ciò restituirà il primo valore della prima riga dei risultati.

Prova anche a chiamare Dispose() sugli oggetti che implementano IDisposable (come dbadapter, comando, connessione).

 string query = "SELECT SUM (Price) FROM Bill"; using (System.Data.IDbCommand command = new System.Data.OleDb.OleDbCommand(query, DBconn)) { object result = command.ExecuteScalar(); TotalValueLabel.Text = Convert.ToString(result); } 

DataTable è overkill per il recupero di un singolo valore, oltre a non accedere nemmeno correttamente al valore, il modo migliore è usare execute scalar:

 var query = "SELECT SUM (Price) FROM Bill"; using (var cmd = new OleDbCommand(query, DBcon)) { TotalValueLabel.Text = cmd.ExecuteScalar().ToString(); }