c# - 我怎样才能插入到两个sql相关的表中?

标签 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();
        }
    }

但是错误的是人信息插入了两次,电话号码插入了一次,错误是什么?

最佳答案

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

int ID = Int32.Parse(cmd.ExecuteScalar().ToString());

另一个在这里:

int val = cmd.ExecuteNonQuery();

两条指令(cmd.ExecuteScalar()cmd.ExecuteNonQuery())都运行命令。确保您只有其中一个(可能是第一个,但您是逻辑的所有者,所以这是您的决定)。

关于c# - 我怎样才能插入到两个sql相关的表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6987822/

相关文章:

c# - 管理每个环境的配置

sql - 在 SQL :query tag; why? JSTL 1.2 内部使用时,使用 AS 重命名 SQL SELECT 语句中的列名称失败

python - 执行从文件中读取的sql语句

c# - 您可以缓存编译后的代码以针对不同的 Session/hostObject 执行吗?

c# - 如何将 namevaluecollection 自动映射到强类型类?

c# - Automapper 在第一次调用时正确映射,但在第二次调用时跳过属性

c# - 查询重复日期

mysql - 根据 MySql 中具有最小和最大日期的记录选择差异

php - 创建多值搜索,与 SQL 作斗争

mysql - 如何从 MySQL 表中删除除具有最新日期的行之外的所有重复行?