![](/img/trans.png)
[英]How can I properly get my 'Calculate' button to calculate the total price and discount amount in ASP.NET C#?
[英]How can I add and get all my database table values (numbers) and displaying the total amount? C#
我最近在努力解决一个新问题。 我有一个数据库表,其中包含多个字段(列),其中包含几行,包含与字段名相关的(money - decimal)值。
例如:
我想要做的是从数据库中获取这些值,将它们一起添加并在标签中显示总量。
到目前为止,我使用OleDbDataReader来满足我所有的输出/存储价值需求。 虽然我完全不知道如何添加读取值,因为读者通常希望读取预定义的字段名称。
但是,在我的项目中,用户可以添加自定义新字段名称(因此您无法在阅读器中预先定义字段名称,因为您不知道用户将在数据库中添加哪些自定义字段名称。这些自定义添加的字段名称及其值也需要在总量中添加,但..
有谁知道如何解决这个问题?
我尝试了多种方法,比如将它存储在一个数组中,定义十进制变量并使用像x = x + (decimal)reader[0]
但这一切都没有用,所以我想我离开了。
我用于阅读部分的代码(和查询)如下:
try
{
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
string query = "select * from money where [Month]='January'";
command.CommandText = query;
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
//Something I tried
//x[0] = (decimal)reader[0];
//x[1] = (decimal)reader[1];
//And so on...
//Another thing I tried
//list.Add(reader.GetInt32(0));
}
//list.ToArray();
//int sum = list.Sum();
// y = x[0] + x[1] + ...;
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex);
}
您应该只能声明一个变量,然后将所有列相加。 如果您不知道阅读器中的列数,可以使用reader.FieldCount
。
您无需知道列名即可从阅读器获取数据。 您可以在开始时通过列索引访问它,例如reader[0]
,或使用诸如GetDecimal(0)
类的辅助方法。
try
{
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
string query = "select * from money where [Month]='January'";
command.CommandText = query;
OleDbDataReader reader = command.ExecuteReader();
// start the total at 0
int total = 0.0m;
while (reader.Read())
{
// loop through all the fields in the reader
for(int f = 0; f < reader.FieldCount; f++) {
// read as a decimal and add to the total
total += reader.GetDecimal(f);
}
}
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex);
}
希望这可以帮助 -
decimal total = 0M;
while (dr.Read())
{
for (int i = 0; i < dr.FieldCount; i++)
{
total+= (decimal) (dr[i] != DBNull.Value ? dr[i] : 0.0);
}
}
这将为每一行添加所有列的值。
Datareader具有称为字段计数的属性,可以给出列数..因此您可以使用类似下面的内容
double num=0.0m;
for (int i = 0; i < rdr.FieldCount; i++)
num += rdr[i];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.