使用 INSERT IDENTITY 插入多个表 - ADO.Net

Posted

技术标签:

【中文标题】使用 INSERT IDENTITY 插入多个表 - ADO.Net【英文标题】:Insert into multiple tables using INSERT_IDENTITY - ADO.Net 【发布时间】:2016-12-27 10:16:38 【问题描述】:

我想用 ADO.NET 在多个表中插入记录。

我想在名为 Professionals 的表中插入一条新记录。它有一个映射到不同表的外键。 表:

例子:

 cmd.CommandText = "insert T_Name select (Name.T_Name,Date.T_Name,DId.Date) values (@N,GETDATE(),???)from T_Name inner join Date ON Date.DId=T_Name.DId; ";
 cmd.Parameters.AddWithValue("@N", txt_Name.Text);

...

如何一次将值添加到这些表中?

【问题讨论】:

先完成你的问题,然后点击“发布”按钮。 我完全问了问题 OR ..... 呢?? 使用 ADO.Net 的任何其他方式 【参考方案1】:

为第一个表添加插入 sql 后

SELECT SCOPE_IDENTITY();

然后你得到最后插入的 id。您可以使用第二个 sql 参数。

例子:

        var dateNow = DateTime.Now;
        var cmd = new SqlCommand("INSERT INTO Date (Date) VALUES (@Date);SELECT SCOPE_IDENTITY();", cnn);
        cmd.Parameters.AddWithValue("@Date", dateNow);
        var insertedId = cmd.ExecuteScalar();
        cmd = new SqlCommand("INSERT INTO T_Name (Name,Date,DId) VALUES (@Name,@Date,@DId);", cnn);
        cmd.Parameters.AddWithValue("@Name", "Test");
        cmd.Parameters.AddWithValue("@Date", dateNow);
        cmd.Parameters.AddWithValue("@DId", insertedId);
        cmd.ExecuteNonQuery(); //or ExecuteScalar() for get last insertedId

【讨论】:

你能写一个例子吗?

以上是关于使用 INSERT IDENTITY 插入多个表 - ADO.Net的主要内容,如果未能解决你的问题,请参考以下文章

无法添加表行,因为“当 IDENTITY_INSERT 设置为 OFF 时,无法在表 'Users' 中插入标识列的显式值”错误

当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值

实体框架抛出无法在表中插入标识列的显式值...当 IDENTITY_INSERT 设置为 OFF 错误

FireDAC,阵列DML,SQL Server和IDENTITY_INSERT

当 IDENTITY_INSERT 设置为 OFF 时,不能向表"*User" 中的标识列插入显示值

当 IDENTITY_INSERT 设置为 OFF 时,无法在表“tbl Fingerprint”中插入标识列的显式值 [重复]