You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从MS Access数据库取值并绑定到C#变量用于计费计算

如何将MS Access数据库中的费率数据绑定到C#变量实现计费计算

要把Access数据库tarriff_table里的费率数据绑定到你的C#变量,我们可以通过OleDb连接读取数据库数据,再赋值给对应变量。下面是具体实现步骤:

1. 添加必要的命名空间

确保项目引用了System.Data,然后在代码文件顶部添加OleDb相关命名空间:

using System.Data.OleDb;

2. 编写读取费率数据的方法

写一个私有方法从数据库读取tarriff_table的前两行数据,同时处理连接异常、数据不足等情况:

private void LoadTariffData()
{
    // 替换为你的Access数据库实际路径
    string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\YourDBPath\YourDatabase.accdb;Persist Security Info=False;";

    try
    {
        using (OleDbConnection conn = new OleDbConnection(connectionString))
        {
            conn.Open();
            // 按上限升序查询,确保取到正确的阶梯费率行
            string query = "SELECT upperLimit, perUnitCost FROM tarriff_table ORDER BY upperLimit ASC;";
            using (OleDbCommand cmd = new OleDbCommand(query, conn))
            {
                using (OleDbDataReader reader = cmd.ExecuteReader())
                {
                    // 读取第一行阶梯数据
                    if (reader.Read())
                    {
                        upperLimit1 = reader.GetDouble(0);
                        perUnitCost1 = reader.GetDouble(1);
                    }
                    else
                    {
                        MessageBox.Show("tarriff_table中没有找到费率数据");
                        return;
                    }

                    // 读取第二行阶梯数据
                    if (reader.Read())
                    {
                        upperLimit2 = reader.GetDouble(0);
                        perUnitCost2 = reader.GetDouble(1);
                    }
                    else
                    {
                        MessageBox.Show("tarriff_table中至少需要两行阶梯费率数据");
                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show($"加载费率数据失败: {ex.Message}");
    }
}

3. 在窗体初始化时加载数据

在窗体构造函数或Load事件中调用上述方法,确保点击计算按钮前变量已赋值:

public YourFormName()
{
    InitializeComponent();
    // 启动时加载费率数据
    LoadTariffData();
}

4. 整合到计费计算代码

现在你的button1_Click方法可以正常使用已赋值的变量,同时建议添加输入验证避免格式错误:

// 按需初始化这两个变量,若来自数据库可在LoadTariffData中一并读取
double demandCharge = 50; 
double VAT = 0.1;

double upperLimit1, upperLimit2;
double perUnitCost1, perUnitCost2;

private void button1_Click(object sender, EventArgs e)
{
    double con_unit = 0, bill = 0, mcon_unit = 0, totalbill = 0;
    
    // 输入格式验证
    if (!double.TryParse(textBox1.Text, out con_unit))
    {
        MessageBox.Show("请输入有效的用电量数值");
        return;
    }
    if (!double.TryParse(textBox2.Text, out mcon_unit))
    {
        MessageBox.Show("请输入有效的计量用电量数值");
        return;
    }

    // 阶梯计费逻辑
    if (con_unit < upperLimit1)
    {
        bill = con_unit * perUnitCost1;
    }
    else if (con_unit < upperLimit2)
    {
        bill = (upperLimit1 * perUnitCost1) + ((con_unit - upperLimit1) * perUnitCost2);
    }
    else
    {
        bill = (upperLimit1 * perUnitCost1) + ((upperLimit2 - upperLimit1) * perUnitCost2);
    }

    totalbill = Math.Ceiling((((((bill + demandCharge) * VAT) + (bill + demandCharge)) / con_unit) * mcon_unit));
    textBox3.Text = Convert.ToString(totalbill);
}

注意事项

  • 若使用旧版.mdb格式数据库,需将连接字符串中的Provider改为Microsoft.Jet.OLEDB.4.0。
  • 确保数据库文件路径正确,且程序有读取该文件的权限。
  • 可根据实际需求扩展LoadTariffData方法,读取demandCharge和VAT等其他参数。

内容的提问来源于stack exchange,提问作者Khandkar Asif Hossain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:40:35