我想修改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'
答案 0 :(得分:0)
您可以重置CommandText属性并重用SqlCommand对象。 但是,必须先关闭SqlDataReader,然后才能执行新的或 上一个命令。
您看起来好像不是在使用SqlDataReader,但这可能适用于您正在使用的SqlDataAdapter。
答案 1 :(得分:0)
builder.GetInsertCommand().Clone();