如何更改SqlCommandBuilder.InsertCommand的命令文本?

时间:2019-04-08 15:17:05

标签: c# sql-server tsql ado.net

我想修改SqlCommandBuilder以便在插入后检索SCOPE_IDENTITY()的值,而不必为2000多个表中的每一个创建存储过程。

我正在尝试以下代码:

SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM dbo.Categories", connection);                          

DataTable categories = new DataTable();
adapter.Fill(categories);
...

SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.InsertCommand = builder.GetInsertCommand();
adapter.InsertCommand.CommandText = adapter.InsertCommand.CommandText+
            +"; SELECT SCOPE_IDENTITY() AS SCOPEIDENTITY";
            ...
adapter.Update(categories);

但是无论我键入什么,DataAdapter都会执行开头存在的SQL语句-而不是我的更改。

即使此文本也不会产生SQL错误:

adapter.InsertCommand.CommandText = "Hello world";
adapter.Update(categories);

SQL Server探查器显示此SQL语句,而不显示错误。

exec sp_executesql N'INSERT INTO [dbo].[Categories] ([CategoryName]) VALUES (@p1)',N'@p1 nvarchar(12)',@p1=N'New Category'

2 个答案:

答案 0 :(得分:0)

SqlCommand manual page说:

  

您可以重置CommandText属性并重用SqlCommand对象。   但是,必须先关闭SqlDataReader,然后才能执行新的或   上一个命令。

您看起来好像不是在使用SqlDataReader,但这可能适用于您正在使用的SqlDataAdapter。

答案 1 :(得分:0)

builder.GetInsertCommand().Clone();