使用主键在两个表中插入数据
本文关键字:两个 数据 插入 | 更新日期: 2023-09-27 18:29:15
这是我的BottomSave,我有两个表Employee和Contract,主键为Enumber。
从将数据添加到表中,员工正在使用
但将数据添加到表合同中,但不添加
因为我的主键。我插入合同有什么问题吗?
MySQL connect = new MySQL();
connect.Connection_Today();
SqlCommand cmd = new SqlCommand();
cmd.Connection = MySQL.con;
// Adding data to table Employee from database
cmd.CommandText = "Insert into Employee(Enumber,Inumber,Pnumber,Fname,Mname,Sname,Age,Bdate,Gender,Mstatus,Nationality,Eaddress,Cnumber,Picture) Values (@Enumber,@Inumber,@Pnumber,@Fname,@Mname,@Sname,@Age,@Bdate,@Gender,@Mstatus,@Nationality,@Eaddress,@Cnumber,@Picture)";
cmd.Parameters.AddWithValue("@Enumber", txtEnumber.Text);
cmd.Parameters.AddWithValue("@Inumber", txtInumber.Text);
cmd.Parameters.AddWithValue("@Pnumber", txtPassport.Text);
cmd.Parameters.AddWithValue("@Fname", txtPassport.Text);
cmd.Parameters.AddWithValue("@Mname", txtMname.Text);
cmd.Parameters.AddWithValue("@Sname", txtSname.Text);
cmd.Parameters.AddWithValue("@Age", txtAge.Text);
cmd.Parameters.AddWithValue("@Bdate", DtpBdate.Text);
cmd.Parameters.AddWithValue("@Gender", cbGender.Text);
cmd.Parameters.AddWithValue("@Mstatus", cbMstatus.Text);
cmd.Parameters.AddWithValue("@Nationality", txtNationality.Text);
cmd.Parameters.AddWithValue("@Eaddress", txtEAddress.Text);
cmd.Parameters.AddWithValue("@Cnumber", txtCnumber.Text);
cmd.Parameters.AddWithValue("@Picture", ImageToBase64(PbImage.Image,System.Drawing.Imaging.ImageFormat.Jpeg));
cmd.ExecuteNonQuery();
// Adding data to table Contract from database
cmd.CommandText = "Insert into Contract(Enumber,Position,Salary,CDuration,Scontract,Econtract) Values(@Enumber,@Position,@Salary,@CDuration,@Scontract,@Econtract)";
cmd.Parameters.AddWithValue("@Enumber", txtEnumber.Text);
cmd.Parameters.AddWithValue("@Position", txtPosition.Text);
cmd.Parameters.AddWithValue("@Salary", txtSalary.Text);
cmd.Parameters.AddWithValue("@CDuration", txtCDuration.Text);
cmd.Parameters.AddWithValue("@Scontract", dtpStart.Text);
cmd.Parameters.AddWithValue("@Econtract", dtpEnd.Text);
cmd.ExecuteNonQuery();
connect.Disconnect();
在将参数放入第二个查询之前,您需要使用SqlParameterCollection.Clear
方法清除参数,因为您的命令已经具有添加在第一个命令中的参数名称。
cmd.CommandText = "Insert into Contract(Enumber,Position,Salary,CDuration,Scontract,Econtract) Values(@Enumber,@Position,@Salary,@CDuration,@Scontract,@Econtract)";
cmd.Parameters.Clear();
...
也可以使用using
语句自动处理连接和命令,而不是手动调用Close
或Dispose
方法。
using(var con = new SqlConnection(conString))
using(var cmd = con.CreateCommand())
{
// Set your CommandText property of your command with parameters.
// Add your parameters values.
// Open your connection
// Execute your query
// Set your second command to your CommandText property
// Clear your parameters.
// Add new parameter values.
// Execute your second query.
}
顺便说一句,尽量不要使用AddWithValue
。它有时可能会产生意想不到的结果。使用Add
方法重载来指定参数类型及其大小。