解决  将数据插入表时获取有关外键的错误消息。

Sock1992

众所周知的成员
加入
5月20日,2020年
消息
99
编程经验
Beginner
注册数据时将存储在两个表中。柑荟集团和客户。
1616497782728.png.
1616497884907.png.


这样的代码如下所示,它可以根据我想要的方式工作,将正确的详细信息插入两个表。

C#:
 {                
                    string query_1 = "Insert into customer  (firstName, lastName, address, contactNumber) values ( @firstName, @lastname, @address, @contact)";
                    string query_2 = "select customerId from customer where customerId = (select max(customerId) from customer)";
                    string query_3 = "Insert into customerLogin (email, password, customerId) Values (@email, @password, @customerId)";

                    _IsqlDataFunctions.GetConnection().Open();
                    cmd = new SqlCommand(query_1, _IsqlDataFunctions.GetConnection());
                    cmd.Parameters.AddWithValue("@firstName", txtFirstName.Text);
                    cmd.Parameters.AddWithValue("@lastName", txtLastName.Text);
                    cmd.Parameters.AddWithValue("@address", txtboxAddress.Text);
                    cmd.Parameters.AddWithValue("@contact", txtboxContact.Text);
                    cmd.ExecuteNonQuery();
                   
                   
                    cmd = new SqlCommand(query_2, _IsqlDataFunctions.GetConnection());
                    var customerId = cmd.ExecuteScalar();
                    userDetails.Add(customerId.ToString());
                   
                   
                    cmd = new SqlCommand(query_3, _IsqlDataFunctions.GetConnection());
                    cmd.Parameters.AddWithValue("@email", txtEmailAddress.Text);
                    cmd.Parameters.AddWithValue("@password", SqlDataFunctions.hashPassword(txtPassword.Text));
                    cmd.Parameters.AddWithValue("@customerId", customerId);
                    cmd.ExecuteNonQuery();
                    _IsqlDataFunctions.GetConnection().Close();
                    MessageBox.Show("You have been registered succesfully");    
                    clearFields();
                }

当用户创建预订时,我想将以下数据插入预订表:
1616498077046.png.


以下代码如下:
C#:
 }          

           
            string query = "Insert into Bookings (seatNo, ticketType, price, dateOfPurchase, customerId, scheduleId)  VALUES ( @seatNo, @ticketType, @price, @date, @customerId, @scheduleId )";

            _IsqlDataFunctions.GetConnection().Open();
            cmd = new SqlCommand(query, _IsqlDataFunctions.GetConnection());
            cmd.Parameters.AddWithValue("@seatNo", selectedSeatNo);
            cmd.Parameters.AddWithValue("@ticketType", txtTicketType.Text);
            cmd.Parameters.AddWithValue("@price", txtPrice.Text);
            cmd.Parameters.AddWithValue("@date", dateOfPurchase.Text);
            cmd.Parameters.AddWithValue("@customerId", SignIn.userDetails[0]);
            cmd.Parameters.AddWithValue("@scheduleId", txtSchedule.Text);
         
                   
            if (n > 1 || selectedSeatNo == null)
            {
                MessageBox.Show("Please ensure one seat has been selected");
            }
            if (n == 1)
            {

                cmd.ExecuteNonQuery();
                _IsqlDataFunctions.GetConnection().Close();        
                addBookingPanel.BringToFront();
                UserControlManager.ShowUserControl(addBookingPanel, new User_Control.Uc_inputtingPaymentDetails());
               
            }


这是我得到了我的例外的地方,我真的不知道为什么。我觉得它是简单的,但我只是不知道它是什么。我删除了客户表和CustomerID外键并创建一个新的键,但这并没有修复它。
我删除了CustomerID值并执行了查询和存储的其余数据I.E SeveNo,TicketType,Price,Datyofpurchase和SentutSID(见下面的图像)。它只是客户迪斯,给了我一个问题。

1616498925811.png.


文档
名称 价值 类型
$例外 {"insert语句与外键约束冲突"fk_bookings_customer \"。冲突发生在数据库中"TGCSBookingSystem\", table \"dbo.customer\",列'customerid'。\ r \ n声明已被终止。"}system.data.sqlclient.sqlexception.


1616498530050.png.
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,890
地点
切萨皮克,va.
编程经验
10+
The customerId parameter that you pass in MUST be equal to a valid existing customer ID in the customer table. Are you sure that SignIn.userDetails[0] contains such an id?

此外还有一边:这在危险之中,特别是如果您进入多个客户机或多个线程:
C#:
string query_2 = "select customerId from customer where customerId = (select max(customerId) from customer)";
在执行INSERT后,在正确的方式搜索Google以获取自动增值值。
 
最佳 底部