2017-09-25 61 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