2016-12-25 68 views
0

我試圖讓生產商,供應商,項目組的ID從表基於在組合框中的名稱。意思是我將ID傳遞給基於組合框名稱的變量,然後將該ID傳遞給數據庫。但是當我運行這個應用程序時,我得到了相同的結果,製造商,供應商和物品組變量。這是爲什麼?C#Windows窗體數據庫問題

這是工作的罰款較早,但不是現在!我無法弄清楚!

using (SqlConnection con = new SqlConnection(CS)) 
{ 
    con.Open(); 

    SqlCommand cmd = new SqlCommand("SELECT Manufact_Id from Manufacturer Where [email protected]", con); 
    cmd.Parameters.AddWithValue("@Name1", combomanufacture_Createitem.Text); 

    int a = Convert.ToInt32(cmd.ExecuteScalar()); 

    SqlCommand cmd2 = new SqlCommand("SELECT Supplier_Id from Supplier Where [email protected]", con); 
    cmd.Parameters.AddWithValue("@Name2", combo_supplierCreateitem.Text); 

    int b = Convert.ToInt32(cmd.ExecuteScalar()); 

    SqlCommand cmd3 = new SqlCommand("SELECT ItemGroup_Id from ItemGroup Where [email protected]", con); 
    cmd.Parameters.AddWithValue("@Name3", combo_itemgroupCreateitem.Text); 

    int c = Convert.ToInt32(cmd.ExecuteScalar()); 

    try 
    { 
     SqlCommand cmd1 = new SqlCommand("INSERT INTO Items (Custom_Code, Name, Manufacturer, Supplier, Item_Group, Activate, Purchase_Rate, Landing_Cost, Profit_Percentage, Price_to_Customer, MRP,Opening_Stock, Manage_Stock, Description, Discount) VALUES (@Customcode, @Name, @Manufacturer, @Supplier, @Itemgroup, @Activate, @Purchasedate, @Landingcost, @Profitpercentage, @PricetoCustomer, @MRP, @Openingstock, @Managestock, @Description1, @Discount)", con); 

     cmd1.Parameters.AddWithValue("@Customcode", txt_customcode_Createitem.Text); 
     cmd1.Parameters.AddWithValue("@Name", txt_nameCreateitem.Text); 
     cmd1.Parameters.AddWithValue("@Manufacturer", a); 
     cmd1.Parameters.AddWithValue("@Supplier", b); 
     cmd1.Parameters.AddWithValue("@Itemgroup", c); 
     cmd1.Parameters.AddWithValue("@Activate", combo_activateCreateitem.Text); 
     cmd1.Parameters.AddWithValue("@Purchasedate", txt_purchasedateCreateitem.Text); 
     cmd1.Parameters.AddWithValue("@Landingcost", txt_landingcosCreateitem.Text); 
     cmd1.Parameters.AddWithValue("@Profitpercentage", txt_activateCreateitem.Text); 
     cmd1.Parameters.AddWithValue("@PricetoCustomer", txt_PricetocustCreateitem.Text); 
     cmd1.Parameters.AddWithValue("@MRP", txt_mrpCreateitem.Text); 
     cmd1.Parameters.AddWithValue("@Openingstock", txt_openingstockCreateitem.Text); 
     cmd1.Parameters.AddWithValue("@Managestock", combomanagestock_Createitem.Text); 
     cmd1.Parameters.AddWithValue("@Description1", txt_descriptionCreateitem.Text); 
     cmd1.Parameters.AddWithValue("@Discount", txt_DiscountCreateitem.Text); 

     cmd1.ExecuteReader(); 

     MessageBox.Show("Items added Successfully"); 

     con.Close(); 
    } 
    catch (Exception e1) 
    { 
     MessageBox.Show(e1 + "Please enter valid data"); 
    } 
} 
+0

旁註:因爲你不期望任何數據從你的'INSERT'語句返回,你應該使用'cmd1.ExecuteNonQuery();'來執行它(不是'.ExecuteReader()'調用,它會返回一個'IDataReader'來處理返回的結果集) –

回答

1

您正在創建新的命令(CMD2/CMD3)但你設定的參數和執行舊的實例.. (CMD)

所以你執行相同的CMD,這就是爲什麼你得到相同的結果:

SqlCommand cmd = new SqlCommand("SELECT Manufact_Id from Manufacturer Where [email protected]", con); 
cmd.Parameters.AddWithValue("@Name1", combomanufacture_Createitem.Text); 
int a = Convert.ToInt32(cmd.ExecuteScalar()); 

SqlCommand cmd2 = new SqlCommand("SELECT Supplier_Id from Supplier Where [email protected]", con); 
// HERE!! cmd.Parameters... should be cmd2.Parameters 
cmd.Parameters.AddWithValue("@Name2", combo_supplierCreateitem.Text); 
int b = Convert.ToInt32(cmd.ExecuteScalar()); 

SqlCommand cmd3 = new SqlCommand("SELECT ItemGroup_Id from ItemGroup Where [email protected]", con); 
// AND HERE cmd.Parameters... should be cmd3 
cmd.Parameters.AddWithValue("@Name3", combo_itemgroupCreateitem.Text); 
// cmd.execute? should be cmd3.... 
int c = Convert.ToInt32(cmd.ExecuteScalar()); 

複製/粘貼錯誤..

+0

它總是發生。問題是,你不能再看到它了。這使得這個網站令人難以置信,因爲對別人的新鮮看法將有所幫助! –

+0

說實話它不是複製粘貼!它由我寫的。而且我不喜歡複製粘貼,這會讓你成爲一個懶惰的笨蛋程序員。所以你可以猜測,當你初學者和你自己的代碼。簡單的錯誤不被注意,後來讓你瘋了!感謝幫助! – Abhijith

0

你在第一個「cmd」上執行第二個和第三個命令。

SqlCommand cmd = new SqlCommand("SELECT Manufact_Id from Manufacturer Where [email protected]", con); 
      cmd.Parameters.AddWithValue("@Name1", combomanufacture_Createitem.Text); 
      int a = Convert.ToInt32(cmd.ExecuteScalar()); 

      SqlCommand cmd2 = new SqlCommand("SELECT Supplier_Id from Supplier Where [email protected]", con); 
      cmd.Parameters.AddWithValue("@Name2", combo_supplierCreateitem.Text); 
      int b = Convert.ToInt32(cmd.ExecuteScalar()); 

      SqlCommand cmd3 = new SqlCommand("SELECT ItemGroup_Id from ItemGroup Where [email protected]", con); 
      cmd.Parameters.AddWithValue("@Name3", combo_itemgroupCreateitem.Text); 
      int c = Convert.ToInt32(cmd.ExecuteScalar()); 

應該是:

SqlCommand cmd = new SqlCommand("SELECT Manufact_Id from Manufacturer Where [email protected]", con); 
      cmd.Parameters.AddWithValue("@Name1", combomanufacture_Createitem.Text); 
      int a = Convert.ToInt32(cmd.ExecuteScalar()); 

      SqlCommand cmd2 = new SqlCommand("SELECT Supplier_Id from Supplier Where [email protected]", con); 
      cmd2.Parameters.AddWithValue("@Name2", combo_supplierCreateitem.Text); //UPDATED! 
      int b = Convert.ToInt32(cmd2.ExecuteScalar()); //UPDATED! 

      SqlCommand cmd3 = new SqlCommand("SELECT ItemGroup_Id from ItemGroup Where [email protected]", con); 
      cmd3.Parameters.AddWithValue("@Name3", combo_itemgroupCreateitem.Text); //UPDATED! 
      int c = Convert.ToInt32(cmd3.ExecuteScalar()); //UPDATED! 

你可能複製/粘貼,忘了第2和第3添加到CMD結束!

+0

其實它不從其他網站複製粘貼。我創建了這個代碼..雖然它不是一個很大的邏輯代碼。 bt我也使用其他形式的這種邏輯。作爲一個初學者,我覺得這個愚蠢的錯誤會發生,而且會讓你瘋狂!謝謝您的幫助! :) – Abhijith