2017-09-25 9 views
2

私は単純なデータベースアプリケーションを作っていますが、最後の1つの列に追加するのに問題があります。金額にはPRODUCTSテーブルのYearly Premiumを入力し、Yearly(1)、Monthly(12)、またはFortnightly(26)のいずれかを支払うかどうかによって、1、12または26で割ります。私の質問に悩む

ProductIDを使用してSALESテーブルとPRODUCTSテーブルに参加する必要があると仮定しますが、支払い方法(F/M/Y)に応じて金額列を設定する方法を理解することはできません。

以下は、プログラムの各テーブルの2つのスクリーンショットと、現時点でメインセールフォームに入力するコードです。

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 このエラーは、左から右に1回だけ読み取ることができるために発生したと感じています。 – Rick1990

+0

左から右の列を読むことについて話しているなら、それはそうではないと思います。たぶん、rdr列のデータ型に何かが起こっている可能性があります。私はINTとデータベースから来るvarchar列が自動的にint型と文字列型であると思います。 – cjkeilig

+0

fuck man。ありがとう、私は実際にこのコメントを入力する約2分前に小数点を使用する必要があることを理解しました。私はこのプロジェクトを拾い、非常に錆びているので、しばらくしています。それはすべて今働いて歓声を得た! – Rick1990

関連する問題