Я хочу изменить 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'