如何添加和获取我所有的数据库 table 值(数字)并显示总数? C#
How can I add and get all my database table values (numbers) and displaying the total amount? C#
最近我一直在努力解决一个新问题。我有一个数据库 table,其中包含多个字段(列),其中几行包含与字段名相关的(货币 - 十进制)值。
例如:
- table = 金钱
- 字段名称:租金 A、租金 B、租金 C
- 值:10 美元、20 美元、30 美元。
我想做的是从数据库中获取这些值,将它们相加并在标签中显示总量。
到目前为止,我使用 OleDbDataReader 来满足我所有的 outputting/storing 价值需求。尽管我完全不知道如何添加读取值,因为 reader 通常需要读取预定义的字段名称。
然而,在我的项目中,用户可以添加自定义的新字段名称(因此 reader 中的预定义字段名称是不可能的,因为您不知道将添加哪些自定义字段名称由用户在数据库中添加。这些自定义添加的字段名称及其值也需要添加到总金额中..
有人知道我该如何解决这个问题吗?
我尝试了多种方法,例如将其存储在数组中、定义小数变量以及使用类似 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 中的列数,您可以使用 reader.FieldCount
.
获得它
您无需知道列名即可从 reader 获取数据。您可以在开始时按列索引访问它,例如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];
最近我一直在努力解决一个新问题。我有一个数据库 table,其中包含多个字段(列),其中几行包含与字段名相关的(货币 - 十进制)值。
例如:
- table = 金钱
- 字段名称:租金 A、租金 B、租金 C
- 值:10 美元、20 美元、30 美元。
我想做的是从数据库中获取这些值,将它们相加并在标签中显示总量。
到目前为止,我使用 OleDbDataReader 来满足我所有的 outputting/storing 价值需求。尽管我完全不知道如何添加读取值,因为 reader 通常需要读取预定义的字段名称。
然而,在我的项目中,用户可以添加自定义的新字段名称(因此 reader 中的预定义字段名称是不可能的,因为您不知道将添加哪些自定义字段名称由用户在数据库中添加。这些自定义添加的字段名称及其值也需要添加到总金额中..
有人知道我该如何解决这个问题吗?
我尝试了多种方法,例如将其存储在数组中、定义小数变量以及使用类似 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 中的列数,您可以使用 reader.FieldCount
.
您无需知道列名即可从 reader 获取数据。您可以在开始时按列索引访问它,例如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];