2017-10-10 1 views
0

Salut quelle est la bonne façon d'insérer des données de deux tables à une table, ils sont 3 tables, ma table poing est Tbl_order a Order_ID et le second Tbl_Cashier a Cashier_ID et le 3e est Tbl_Finalized a Order_ID et Cashier_ID. la conception complète des tablesInsérer des données de deux tables à une table C#

de Tbl_Cashier

CREATE TABLE [dbo].[Tbl_Cashier] (
    [Cashier_ID] INT   IDENTITY (1, 1) NOT NULL, 
    [FName]  VARCHAR (50) NOT NULL, 
    [MName]  VARCHAR (50) NULL, 
    [LName]  VARCHAR (50) NOT NULL, 
    [Address] NVARCHAR (50) NOT NULL, 
    [ContactNo] VARCHAR (50) NOT NULL, 
    [Email]  NVARCHAR (50) NOT NULL, 
    [Age]  INT   NOT NULL, 
    [Gender]  VARCHAR (50) NOT NULL, 
    [Password] VARCHAR (50) NOT NULL, 
    [role]  NVARCHAR (50) NULL, 
    PRIMARY KEY CLUSTERED ([Cashier_ID] ASC) 
); 

Tbl_order

CREATE TABLE [dbo].[Tbl_order] (
    [Order_ID] INT   IDENTITY (1, 1) NOT NULL, 
    [CustomerNo] INT   NOT NULL, 
    [OrderName] NVARCHAR (MAX) NOT NULL, 
    [Quantity] INT   NOT NULL, 
    [Price]  FLOAT (53)  NOT NULL, 
    [Serves_way] INT   NOT NULL, 
    [Date]  DATETIME  NOT NULL, 
    PRIMARY KEY CLUSTERED ([Order_ID] ASC), 
    CONSTRAINT [Serves_wayFK] FOREIGN KEY ([Serves_way]) REFERENCES [dbo].[Tbl_Serve] ([Serve_ID]) 
); 

Tbl_Finalized

CREATE TABLE [dbo].[Tbl_Finalized] (
    [Finalized_ID] INT IDENTITY (1, 1) NOT NULL, 
    [Order_ID]  INT NOT NULL, 
    [Cashier_ID] INT NOT NULL, 
    [Customer_ID] INT NOT NULL, 
    PRIMARY KEY CLUSTERED ([Finalized_ID] ASC), 
    CONSTRAINT [CashierFK] FOREIGN KEY ([Cashier_ID]) REFERENCES [dbo].[Tbl_Cashier] ([Cashier_ID]), 
    CONSTRAINT [CustomerFK] FOREIGN KEY ([Customer_ID]) REFERENCES [dbo].[Tbl_Customer] ([Customer_ID]) 
); 

quand je connecte l'application que j'utilise Tbl_Cashier par FName et mot de passe I Connectez-vous, Comment obtenir le Cashier_ID qui s'est connecté et l'insérer dans Cashier_ID dans Tbl_Finalized? ceci est mon code de connexion:

private void but_log_in_Click(object sender, EventArgs e) 
     { 
      if (tbx_username.Text == "" || Tbx_Password.Text == "") 
      { 
       MessageBox.Show("Please provide UserName and Password"); 
       return; 
      } 
      try 
      { 

       using (SqlConnection con = new SqlConnection(connectionString)) 
       using (SqlCommand cmd = new SqlCommand("Select * from 
       Tbl_Cashier where [email protected] and [email protected]", con)) 
       using (SqlDataAdapter adapt = new SqlDataAdapter(cmd)) 

       { 
        con.Open(); 
        cmd.Parameters.AddWithValue("@username", tbx_username.Text); 
        cmd.Parameters.AddWithValue("@password", Tbx_Password.Text); 


          HabibisGrll.Globals.sss = tbx_username.Text; 

        DataSet ds = new DataSet(); 
        adapt.Fill(ds); 
        con.Close(); 
        int count = ds.Tables[0].Rows.Count; 
        //If count is equal to 1, than show frmMain form 
        if (count == 1) 
        { 
         MessageBox.Show("Login Successful!"); 
         this.Hide(); 
         HabibisGrll fm = new HabibisGrll(); 
         fm.Show(); 
        } 
        else 
        { 
         MessageBox.Show("Login Failed!"); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 

Et de l'application que j'utilise listboxes pour insérer les commandes à Tbl_order je veux insérer le Order_ID il a été i sélectionné et inséré Tbl_order-Order_ID dans Tbl_Finalized. mon code d'insérer toutes les commandes à la base de données listbox

private void Order() 
     { 
      using (SqlConnection connection = new SqlConnection(connectionString1)) 
      { 
       String query = "INSERT INTO Tbl_order (OrderName,Quantity,Price,Serves_way,Date,CustomerNo) VALUES (@OrderName,@Quantity, @Price,'" + servers + "','" + time1.ToString(format1) + "','" + Globals.order + "')"; 
       Globals.order++; 
       connection.Open(); 
       using (SqlCommand command = new SqlCommand(query, connection)) 
       { 
        // Add the length of this text column as third parameter... 
        command.Parameters.Add("OrderName", SqlDbType.NVarChar, 50); 
        command.Parameters.Add("Quantity", SqlDbType.Int); 
        command.Parameters.Add("Price", SqlDbType.Money); 
        command.Prepare(); 

       for (int i = 0; i < lst_OrderName.Items.Count; i++) 
       { 
        command.Parameters[0].Value = lst_OrderName.GetItemText(lst_OrderName.Items[i]); 
        command.Parameters[1].Value = Convert.ToInt32(lst_QTY.Items[i]); 
        command.Parameters[2].Value = Convert.ToDouble(lst_Price2.Items[i]); 

        command.ExecuteNonQuery(); 

        /* int totalRows = CustomerNo.Rows.Count; 
         int totalCols = CustomerNo.Columns.Count; 

         string value = CustomerNo.Rows[totalRows - 1][totalCols - 1].ToString();*/ 
       } 
      } 
     } 
    } 

Répondre

0

à but_log_in_Click vous mettez les données dans un ensemble de données, dont le premier est le caissiers ID - le garder dans un endroit sûr maintenant que vous avez votre connecté ID

+0

Oui, j'ai eu du mal à l'essayer et à vous mettre à jour ^^, mais qu'en est-il de l'idée de "Order_ID"? –

+0

https://stackoverflow.com/questions/42648/best-way-to-get-identity-of-inserted-row – BugFinder

+0

l'indice de la réponse est ici comme il l'a dit ^^ mais la 2ème partie n'est pas sûre que ^^ –