C#将SQL值求和到标签
我目前有一个DataGridView,它显示所有项目。我想将价格栏中的所有价格相加,然后在“TotalValueLabel”标签中反映出总价。我的陈述有什么不对C#将SQL值求和到标签,c#,sql,database,ms-access,C#,Sql,Database,Ms Access,我目前有一个DataGridView,它显示所有项目。我想将价格栏中的所有价格相加,然后在“TotalValueLabel”标签中反映出总价。我的陈述有什么不对 string query = "SELECT SUM (Price) FROM Bill"; OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, DBconn); DataTable source = new DataTable(
string query = "SELECT SUM (Price) FROM Bill";
OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, DBconn);
DataTable source = new DataTable();
dAdapter.Fill(source);
TotalValueLabel.Text = source.ToString();
您的源是数据表,因此“
source.ToString()
”不会给出您的结果
请尝试“source.Rows[0][0].ToString();
”
DataTable对象包含一个DataRow对象列表,其中包含查询结果中每一行的值
然而,在你的情况下,你可能不需要这个。如果要查找单个值,应使用并调用ExecuteScalar()
。这将返回结果的第一行的第一个值
还可以尝试对实现的对象(如dbadapter、command、connection)调用Dispose()
DataTable对于单值检索来说是一种过分的方法,除了不能正确访问值之外,更好的方法是使用execute scalar:
var query = "SELECT SUM (Price) FROM Bill";
using (var cmd = new OleDbCommand(query, DBcon))
{
TotalValueLabel.Text = cmd.ExecuteScalar().ToString();
}
您可能应该告诉我们您的示例中出现了什么问题。它会崩溃吗?它是否显示任何内容?当表单装入时,它不会在标签中显示任何内容。我通常会写入TotalValueLabel.Text=source.Rows[0][0]。ToString();谢谢你,保罗,真是太棒了!请您解释一下[0][0]行是什么?行[0]表示数据表的第一行,第二个索引访问row columns集合-返回第一列的值。所以第[1][5]行将是第2行的第6列值。谢谢,正如Paul之前所建议的那样。但我有一个问题,如何以货币格式显示结果?然后首先将结果转换为int并使用.TotalValueLabel.Text=source.Rows[0][0].ToString(“C”);似乎不工作。行[0][0]返回一个对象。带格式化参数的ToString可处理数值数据,如int、decimal等。因此,请将source.Rows[0][0]对象转换为int,然后调用ToString(“C”)。您好,感谢您的输入。我可以知道使用datatable和executescalar的区别吗?
var query = "SELECT SUM (Price) FROM Bill";
using (var cmd = new OleDbCommand(query, DBcon))
{
TotalValueLabel.Text = cmd.ExecuteScalar().ToString();
}