2016-12-25 4 views
0

Ich versuche, Hersteller, Lieferanten, Artikelgruppen-IDs aus ihren Tabellen basierend auf den Namen in der Combobox zu erhalten. Bedeutet, dass ich ID an eine Variable übergebe, die auf den Namen in der Combobox basiert, und dann diese ID an die Datenbank übergebe. Aber wenn ich diese Anwendung ausführe, erhalte ich dasselbe Ergebnis für die Hersteller-, Lieferanten- und Artikelgruppenvariable. Warum das?C# Windows Forms Datenbank Problem

Es funktionierte gut früher, aber nicht jetzt! Ich kann es nicht herausfinden!

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

Seitennotiz: Da Sie keine Daten erwarten, die von Ihrer 'INSERT'-Anweisung zurückgegeben werden, sollten Sie' cmd1.ExecuteNonQuery(); 'verwenden, um sie auszuführen (nicht den' .ExecuteReader()} Aufruf retourniere einen 'IDataReader', um eine Ergebnismenge zu verarbeiten, die zurückgegeben wird. –

Antwort

1

Sie erstellen neue Befehle (cmd2/cmd3) aber die Parameter eingestellt und die alte Instanz ausführen .. (cmd)

Sie sind also die gleiche cmd ausgeführt wird, das ist, warum Sie das gleiche Ergebnis zu erzielen:

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

Kopieren/Einfügen Bugs ..

+0

Es passiert die ganze Zeit. Das Problem ist, dass Sie es nicht mehr sehen können. Das macht diese Seite unglaublich, denn eine frische Sicht auf andere wird Ihnen helfen! –

+0

Um ehrlich zu sein ist es nicht kopieren Paste! es ist von mir geschrieben. Und ich mag das Kopieren nicht, das einen faulen dummen Programmierer macht. So können Sie erraten, dass wenn Sie Anfänger sind und Ihre eigenen Codes machen .. einfache Fehler bleiben unbemerkt und machen Sie später verrückt! danke für die Hilfe! – Abhijith

0

Sie sind Ausführen auf dem ersten "cmd" für den zweiten und dritten Befehl.

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

Sollte sein:

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! 

Sie wahrscheinlich kopiert/eingefügt und vergessen, die 2 und 3 bis zum Ende des cmd hinzuzufügen!

+0

Eigentlich ist es nicht kopieren Paste von anderen Seiten. Ich habe diesen Code erstellt .. obwohl es kein großer logischer Code ist. Ich benutze diese Logik auch in anderen Formen. Als Anfänger güsse ich diese dummen Fehler passieren und auch das wird dich verrückt machen !!!! Danke für die Hilfe! :) – Abhijith