2017-09-25 44 views
2

我做了一个简单的数据库应用程序,但是我在添加最后一列时遇到了问题。金额栏需要从PRODUCTS表中填入Yearly Premium,然后根据每年(1),每月(12)或每两周(26)支付的金额除以1,12或26。我的查询出现问题

我假设我需要使用ProductID加入SALES和PRODUCTS表,但无法弄清楚如何填充金额列取决于他们如何支付(F/M/Y)。

下面是程序中每个表格的两个屏幕截图,以及此时用于填充“主要销售”表单的代码。

Sales Screen where amount needs to be calculated.

The Yearly premium needs to come from here

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); 
     } 
    } 

感谢您对满口关于我的问题的任何帮助。

回答

3

你是对的加入。

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语句。不过,我建议插入销售时插入正确的金额。干杯

请确保您的销售班有这个

+0

感谢您的评论。这是完全意义上的。我试图实现您的解决方案,现在正在获取此错误。不知道为什么我把它变成了一个INT,并且我创造了一个新的课程。 https://i.imgur.com/RjJBldq.png 这就是我实现你的代码的方式。 https://pastebin.com/xCrWLuq7 我有一种感觉,这个错误是由于它只能从左到右读一次或什么东西。 – Rick1990

+0

如果您正在讨论从左到右阅读专栏,我不认为这会是。也许有些事情与rdr列的数据类型有关。我会假设来自数据库的INT和varchar列自动为int和字符串类型 – cjkeilig

+0

他妈的人。谢谢我实际上已经发现,在输入此评论之前,我需要在大约2分钟前使用小数。自从我拿起这个项目已经有一段时间了,并且非常生锈。知道了所有的工作,现在欢呼! – Rick1990