【问题标题】:Trouble with my Query我的查询有问题
【发布时间】:2018-03-05 22:22:52
【问题描述】:

我制作了一个简单的数据库应用程序,但是在添加最后一列时遇到问题。金额列需要填充 PRODUCTS 表中的年度保费,然后除以 1、12 或 26,具体取决于是按年 (1)、每月 (12) 还是每两周 (26) 支付。

我假设我需要使用 ProductID 加入 SALES 和 PRODUCTS 表,但无法根据付款方式(F / M / Y)弄清楚如何填充金额列。

下面是程序中每个表格的两个屏幕截图,以及我现在用来填充 Main Sales 表单的代码。

private void DisplaySales()
    {
        string selectQuery;
        selectQuery = "SELECT * FROM Sales";
        List<Sale> saleList = new List<Sale>();
        try
        {
            // Automatically  open and close the connection
            using (var conn = ConnectionManager.DatabaseConnection())
            using (var cmd = new SqlCommand(selectQuery, conn))
            using (var rdr = cmd.ExecuteReader())
            {

                while (rdr.Read())
                {
                    //Define the list items
                    var sale = new Sale(
                        int.Parse(rdr["SaleID"].ToString()),
                        int.Parse(rdr["CustomerID"].ToString()),
                        int.Parse(rdr["ProductID"].ToString()),
                        rdr["Payable"].ToString(),
                        DateTime.Parse(rdr["StartDAte"].ToString()));

                    saleList.Add(sale);
                }
                dgvSales.DataSource = saleList;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Unsuccessful" + ex);
        }
    }

感谢大家对我的问题的任何帮助。

【问题讨论】:

    标签: c# mysql sql database join


    【解决方案1】:

    关于加入,你是对的。

    selectQuery = "SELECT * FROM Sales AS Sal INNER JOIN Product AS Pro ON Sal.ProductID = Pro.ProductID
    

    然后有一个语句,当您在 while 循环中获得结果时执行逻辑。

    int amount;
    switch(rdr["Payable"].ToString()) {
        case "M": amount =         rdr["YearlyPremium"] / 12
        break;
        case "F": amount =     rdr["YearlyPremium"] / 26
        break;
        default: amount =    rdr["YearlyPremium"];
        break;
    

    }

    然后将金额添加到销售对象并将其传递给销售构造函数。 您可以创建自己的枚举或字典来避免 switch 语句。但是,我建议在插入销售时插入正确的金额。干杯

    确保你的销售类有这个

    【讨论】:

    • 感谢您的评论。这完全有道理。我已尝试实施您的解决方案,但现在收到此错误。不知道为什么我要把它变成一个 INT 并且我做了一个新的类来增加它的数量。 i.imgur.com/RjJBldq.png 这就是我实现您的代码的方式。 pastebin.com/xCrWLuq7我感觉这个错误是因为它只能从左到右读取一次什么的。
    • 如果您说的是从左到右阅读列,我认为不会是这样。也许 rdr 列的数据类型有问题。我假设来自数据库的 INT 和 varchar 列自动是 int 和 string 类型
    • 他妈的。谢谢,实际上我发现在您输入此评论之前大约 2 分钟我需要使用十进制。自从我拿起这个项目已经有一段时间了,我很生疏。现在一切顺利!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2015-07-31
    • 2010-12-23
    • 2010-11-26
    • 2017-02-25
    • 2010-09-29
    • 1970-01-01
    相关资源
    最近更新 更多