繁体   English   中英

如何添加和获取所有数据库表值(数字)并显示总金额? C#

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

我最近在努力解决一个新问题。 我有一个数据库表,其中包含多个字段(列),其中包含几行,包含与字段名相关的(money - decimal)值。

例如:

  • table = money
  • 字段名称:租金A,租金B,租金C.
  • 价值观:10美元,20美元,30美元。

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM