我有两个表,一个用于存储人员信息,另一个用于存储他的电话号码,tbl -persons使用forgin密钥连接到tbl_phones表。
我有一个表单可以插入到两个表中,这就是函数
private void save()
{
SqlCommand cmd = new SqlCommand("insert into tbl_persons (name,address,fax,mobile,email,website) values (@name,@address,@fax,@mobile,@email,@website)" + "Select Scope_Identity()", conn);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@name", T_name.Text.Trim());
cmd.Parameters.AddWithValue("@address", T_address.Text.Trim());
cmd.Parameters.AddWithValue("@fax", T_fax.Text.Trim());
cmd.Parameters.AddWithValue("@mobile", T_mobile.Text.Trim());
cmd.Parameters.AddWithValue("@email", T_mobile.Text.Trim());
cmd.Parameters.AddWithValue("@website", T_mobile.Text.Trim());
int ID = Int32.Parse(cmd.ExecuteScalar().ToString());
SqlCommand cmd2 = new SqlCommand("insert into tbl_phones (phone,person_id) values (@phone,@person)", conn);
cmd2.CommandType = CommandType.Text;
cmd2.Parameters.AddWithValue("@phone", T_phone.Text.Trim());
cmd2.Parameters.AddWithValue("@person", ID);
int val = cmd.ExecuteNonQuery();
int val2 = cmd2.ExecuteNonQuery();
if (val > 0)
{
MessageBox.Show("تم إدخال البيانات بنجاح"+ID, "تم", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign | MessageBoxOptions.RtlReading);
resetFields();
GetDate();
}
}
,但错误是人员信息被插入两次并且电话号码被插入一次,错误是什么?
答案 0 :(得分:6)
您正在cmd
执行两次命令。一个在这里:
int ID = Int32.Parse(cmd.ExecuteScalar().ToString());
另一个在这里:
int val = cmd.ExecuteNonQuery();
两个指令(cmd.ExecuteScalar()
和cmd.ExecuteNonQuery()
)都运行该命令。确保你只有一个(可能是第一个,但你是你逻辑的所有者,这就是你的电话)。
答案 1 :(得分:3)
看起来你正在执行cmd
两次。
来到这里:
\/
int ID = Int32.Parse(cmd.ExecuteScalar().ToString());
/\
并且在这里:
\/
int val = cmd.ExecuteNonQuery();
/\
答案 2 :(得分:0)
问题是您要拨打cmd.ExecuteNonQuery
两次!
int ID = Int32.Parse(cmd.ExecuteScalar().ToString());
然后......
int val = cmd.ExecuteNonQuery();
因此,插入2条记录
答案 3 :(得分:0)
您正在执行第一次查询两次:
int ID = Int32.Parse(cmd.ExecuteScalar().ToString());
和
int val = cmd.ExecuteNonQuery();
删除第二个。