我想修改SqlCommandBuilder以在insert之后检索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'发布于 2019-04-08 23:59:26
您可以重置CommandText属性并重用SqlCommand对象。但是,必须先关闭SqlDataReader,然后才能执行新命令或以前的命令。
看起来您使用的不是SqlDataReader,但这可能适用于您正在使用的SqlDataAdapter。
发布于 2020-10-28 23:39:45
builder.GetInsertCommand().Clone();https://stackoverflow.com/questions/55576677
复制相似问题