如何插入两个sql相关表?

ame*_*mer 2 c# sql

我有两个表,一个用于存储人员信息,一个用于存储他的电话号码,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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

但错误是人员信息被插入两次并且电话号码被插入一次,错误是什么?

Adr*_*iro 6

您正在执行cmd两次命令.一个在这里:

int ID = Int32.Parse(cmd.ExecuteScalar().ToString());
Run Code Online (Sandbox Code Playgroud)

而另一个在这里:

int val = cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

两个指令(cmd.ExecuteScalar()cmd.ExecuteNonQuery())都运行该命令.确保你只有一个(可能是第一个,但你是你的逻辑的所有者,所以这是你的电话).