C# 插入多对多数据库?
伙计们,我正在尝试学习多对多关系数据库,但在“link/junction”表中插入数据时遇到了麻烦。 这就是我的数据库的外观: 现在,由于我的应用程序是C#中的windows桌面应用程序,因此我有一个简单的表单,其中有5个文本框和一个按钮,如下所示: 注:图2-红色代表文本框名称,蓝色代表我将输入的数据类型。Engineered 1、2和3已存在于表C# 插入多对多数据库?,c#,sql,many-to-many,relational-database,C#,Sql,Many To Many,Relational Database,伙计们,我正在尝试学习多对多关系数据库,但在“link/junction”表中插入数据时遇到了麻烦。 这就是我的数据库的外观: 现在,由于我的应用程序是C#中的windows桌面应用程序,因此我有一个简单的表单,其中有5个文本框和一个按钮,如下所示: 注:图2-红色代表文本框名称,蓝色代表我将输入的数据类型。Engineered 1、2和3已存在于表tblenginer中 现在按add,我想在表tblTicketDetail中输入Date和Phone Number的值,在表tblTicket
tblenginer
中
现在按add,我想在表
tblTicketDetail
中输入Date
和Phone Number
的值,在表tblTicket\u Engineer
中输入engineerinid 1
、engineerinid 2
和engineerinid 3
的值。表tblEngineer
中已经有一些行
现在,如果我在tblTicket_Engineer中只输入一个EngineerID,我会在单击“添加”按钮时执行此操作:
查看表tblTicket\u Engineer
中的外键,并告诉我外键是否正确
如何在表tblTicket\u Engineer
中一次输入3行?
这就是我想在按下add按钮时在tblTicket\u Engineer
中发生的情况(对于此图像,值是手动输入的)
您可以使用
UNION ALL
。试着这样做:
string statement1 = @"INSERT INTO tblTicket_Engineer(TicketID,EngineerID)
SELECT @ID,@EID1 UNION ALL
SELECT @ID,@EID2 UNION ALL
SELECT @ID,@EID3";
using (SqlCommand command1 = new SqlCommand(statement1))
using (SqlConnection connection1 = new SqlConnection(ConfigurationManager.ConnectionStrings["ST"].ConnectionString.ToString()))
{
command1.Parameters.AddWithValue("@ID", PID);
command1.Parameters.AddWithValue("@EID1", comboBox1.SelectedValue);
command1.Parameters.AddWithValue("@EID2", comboBox2.SelectedValue);
command1.Parameters.AddWithValue("@EID3", comboBox3.SelectedValue);
connection1.Open();
command1.Connection = connection1;
command1.ExecuteNonQuery();
connection1.Close();
从SQL的角度来看,您应该先将数据插入ticketdetail和engineer表,然后再插入ticket_engineer。
tblEngineer
已经有一些数据,我首先在tblTicketDetail
中插入数据,然后在生成的id上,我在tblTicket_engineer
中插入数据。底线是,如果您正确设置了ticket_engineer表,它们将是其他两个表的键。这意味着,无论您想插入什么,都最好先在ticket和engineer表中存在。是的,我知道这就是为什么在第一次插入查询中,我使用SELECT SCOPE来获取刚刚生成的identity列的值,然后将该值插入到junction表中。
string statement1 = @"INSERT INTO tblTicket_Engineer(TicketID,EngineerID)
SELECT @ID,@EID1 UNION ALL
SELECT @ID,@EID2 UNION ALL
SELECT @ID,@EID3";
using (SqlCommand command1 = new SqlCommand(statement1))
using (SqlConnection connection1 = new SqlConnection(ConfigurationManager.ConnectionStrings["ST"].ConnectionString.ToString()))
{
command1.Parameters.AddWithValue("@ID", PID);
command1.Parameters.AddWithValue("@EID1", comboBox1.SelectedValue);
command1.Parameters.AddWithValue("@EID2", comboBox2.SelectedValue);
command1.Parameters.AddWithValue("@EID3", comboBox3.SelectedValue);
connection1.Open();
command1.Connection = connection1;
command1.ExecuteNonQuery();
connection1.Close();