pacheco
pacheco

Reputation: 215

C# SQL SUM value to a label

I currently have a DataGridView which displays all the item. I would like to sum all the prices in the price column and then reflect the total in a label, 'TotalValueLabel'. What's wrong with my statement?

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

Upvotes: 3

Views: 29457

Answers (2)

Goran
Goran

Reputation: 6846

Your source is a DataTable so "source.ToString()" will not give you your result,

Try "source.Rows[0][0].ToString();".

DataTable object contains a list of DataRow objects which hold values for each row of your query result.

In your case however you might not need this. If you are looking for a single value you should use IDbCommand and call ExecuteScalar(). This will return the first value of the first row of your results.

Also try calling Dispose() on objects that implement IDisposable (like dbadapter, command, connection).

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

Upvotes: 3

Kris Ivanov
Kris Ivanov

Reputation: 10598

DataTable is overkill for single value retrieval, besides your not even accessing the value correctly, better way is to use execute scalar:

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

Upvotes: 2

Related Questions