Как изменить текст команды SqlCommandBuilder.InsertCommand? - PullRequest
0 голосов
/ 08 апреля 2019

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

1 Ответ

0 голосов
/ 08 апреля 2019

На странице руководства SqlCommand говорится следующее:

Вы можете сбросить свойство CommandText и повторно использовать объект SqlCommand.Однако вы должны закрыть SqlDataReader, прежде чем сможете выполнить новую или предыдущую команду.

Не похоже, что вы используете SqlDataReader, но это может относиться к используемому вами SqlDataAdapter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...