[英]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.