如何添加和获取我所有的数据库 table 值(数字)并显示总数? C#

How can I add and get all my database table values (numbers) and displaying the total amount? C#

最近我一直在努力解决一个新问题。我有一个数据库 table,其中包含多个字段(列),其中几行包含与字段名相关的(货币 - 十进制)值。

例如:

我想做的是从数据库中获取这些值,将它们相加并在标签中显示总量。

到目前为止,我使用 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];