簡體   English   中英

插入后如何在另一個表中使用主鍵(SQL C#)

[英]How to use primary key in another table after inserting (SQL C#)

我正在將數據插入名為Booking的表中,然后我想使用分配給該記錄的主鍵並將其插入另一個名為Reservation的表作為外鍵。 我基本上想要將該主鍵分配給此行:

myCommand.Parameters.Add("@BookingNo", OleDbType.Char).Value =  ;

但我不知道在等號后放什么:/

有什么想法我會怎么做? 我真的很堅持:/任何幫助將不勝感激。 而且我意識到我可能還沒有很好地解釋它,但我只是對它感到困惑! :/這是代碼:

        OleDbConnection connect = new OleDbConnection();
        connect.ConnectionString = (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=
                                   F:\Hotel_Reservation_System\Hotel_Reservation_System\bin\Debug\TeamProjectTeam5.accdb; Persist Security Info=False");
        OleDbCommand myCmd = new OleDbCommand();
        OleDbCommand myCommand = new OleDbCommand();
        myCmd.Connection = connect;
        myCommand.Connection = connect;

        DateTime ArrivalDate = dateTimePicker1.Value.Date;
        DateTime DepartureDate = dateTimePicker2.Value.Date;

        myCmd.CommandText = "INSERT INTO Booking(Payment_ID, Guest_No, [Arrival_Date], [Departure_Date], [Booking_Received])" + "VALUES(@PaymentID, @GuestNo, @ArrivalDate, @DepartureDate, @BookingReceived)";

        myCmd.Parameters.Add("@PaymentID", OleDbType.Char).Value = textBox1.Text;
        myCmd.Parameters.Add("@GuestNo", OleDbType.Char).Value = textBox3.Text;
        myCmd.Parameters.Add("@ArrivalDate", OleDbType.DBDate).Value = ArrivalDate;
        myCmd.Parameters.Add("@DepartureDate", OleDbType.DBDate).Value = DepartureDate;
        myCmd.Parameters.Add("@BookingReceived", OleDbType.DBDate).Value = DateTime.Today;

        myCommand.CommandText = "INSERT INTO Reservation(Booking_No, Room_No, Hotel_No)" + "VALUES(@BookingNo, @RoomNo, @HotelNo)";

        myCommand.Parameters.Add("@BookingNo", OleDbType.Char).Value = ;
        myCommand.Parameters.Add("@RoomNo", OleDbType.Char).Value = comboBox4.SelectedItem;
        myCommand.Parameters.Add("@HotelNo", OleDbType.Char).Value = comboBox1.SelectedItem;

        connect.Open();
        int rowsChanged = myCmd.ExecuteNonQuery();
        int rowsChanged2 = myCommand.ExecuteNonQuery();

        connect.Close();

這是我遵循你的建議后的代碼Hassaam:

//初始化你的類中的局部變量int reservationno; 這個得到@@ identity方法實現只是吹你的預訂表插入數據

OleDbCommand myCommand = new OleDbCommand("Select @@identity",connect);
try {
connection.Open();
object value = myCommand.ExecuteScalar();
bookingNo = Convert.ToInt32(value);//it obtained
}    

//現在休息,如下所示。 而且我不確定你為什么要使用所有oledbtype char(例如,如果你有id int而不是你必須使用oleDbtype.Int32否則會產生異常希望它會幫助你

        myCommand.CommandText = "INSERT INTO Reservation(Booking_No, Room_No, Hotel_No)" + "VALUES(@BookingNo, @RoomNo, @HotelNo)";
        try
        {               
            myCommand.Parameters.Add("@BookingNo", OleDbType.Char).Value = bookingNo;
            myCommand.Parameters.Add("@RoomNo", OleDbType.Char).Value = comboBox4.SelectedItem;
            myCommand.Parameters.Add("@HotelNo", OleDbType.Char).Value = comboBox1.SelectedItem;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }

        if (rowsChanged == 1 && rowsChanged2 ==1)
        {
            MessageBox.Show("Booking Made");
        }
        else
        {
            MessageBox.Show("Error: Booking Not Made");
        }

謝謝Hassaan的幫助。 我已經實現了你所說的代碼,但我收到的錯誤是“沒有一個或多個給定參數的值”。 我現在不確定這是代碼的錯還是數據庫方面。我的代碼對你有什么影響? (這也是所有的代碼)

OleDbConnection connect = new OleDbConnection();
        connect.ConnectionString = (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=
                                   F:\Hotel_Reservation_System\Hotel_Reservation_System\bin\Debug\TeamProjectTeam5.accdb; Persist Security Info=False");
        OleDbCommand myCmd = new OleDbCommand();

        myCmd.Connection = connect;


        DateTime ArrivalDate = dateTimePicker1.Value.Date;
        DateTime DepartureDate = dateTimePicker2.Value.Date;

        myCmd.CommandText = "INSERT INTO Booking(Payment_ID, Guest_No, [Arrival_Date], [Departure_Date], [Booking_Received])" + "VALUES(@PaymentID, @GuestNo, @ArrivalDate, @DepartureDate, @BookingReceived)";

        myCmd.Parameters.Add("@PaymentID", OleDbType.Char).Value = textBox1.Text;
        myCmd.Parameters.Add("@GuestNo", OleDbType.Char).Value = textBox3.Text;
        myCmd.Parameters.Add("@ArrivalDate", OleDbType.DBDate).Value = ArrivalDate;
        myCmd.Parameters.Add("@DepartureDate", OleDbType.DBDate).Value = DepartureDate;
        myCmd.Parameters.Add("@BookingReceived", OleDbType.DBDate).Value = DateTime.Today;

        OleDbCommand myCommand = new OleDbCommand("Select @@identity");
        myCommand.Connection = connect;

        connect.Open();
        object value = myCommand.ExecuteScalar();
        int bookingNo = Convert.ToInt32(value);

        myCommand.CommandText = "INSERT INTO Reservation(Booking_No, Room_No, Hotel_No)" + "VALUES(@BookingNo, @RoomNo, @HotelNo)";
        try
        {
            myCommand.Parameters.Add("@BookingNo", OleDbType.Char).Value = bookingNo;
            myCommand.Parameters.Add("@RoomNo", OleDbType.Char).Value = comboBox4.SelectedItem;
            myCommand.Parameters.Add("@HotelNo", OleDbType.Char).Value = comboBox1.SelectedItem;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }

        int rowsChanged = myCmd.ExecuteNonQuery();
        int rowsChanged2 = myCommand.ExecuteNonQuery();

        connect.Close();

        if (rowsChanged == 1 && rowsChanged2 == 1)
        {
            MessageBox.Show("Booking Made");
        }
        else
        {
            MessageBox.Show("Error: Booking Not Made");
        }

你需要做一件我以前在SqlServer中做的事,運行另一個像下面的查詢,你必須使用你的oledb命令,我習慣了sqlserver

using (SqlCommand cmd1 = GetCommand(connection, transaction, 
                                                  "select @@IDENTITY", null))
{
    try
    {
        object value = cmd1.ExecuteScalar();
        studentId = Convert.ToInt32(value);
    }
    catch (Exception ex)
    {
        transaction.Rollback();
        MessageBox.Show(ex.Message.ToString());
    }
} 

您獲得的值將其用作另一個命令中的參數

注意:我已經從我的場景中給出了你的想法,以你的方式實現它。 Getcommand是一個我稱之為你可以簡單地創建命令的方法

SqlCommand cmd = new SqlCommand("Select @@identity",conn)

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM