SQL Server Command Builder и AutoIncrementing IDs

64
8

У меня есть база данных SQL Server, которую я вставляю в набор данных для внесения изменений, однако, когда я обновляю какую-либо конкретную таблицу с помощью SqlDataAdapter, она не запускает ключ ID с тем же значением, которое использует SQL.

Я использую SqlCommandBuilder с SqlDataAdapter. Я нашел этот маленький самородок в MSDN:

Значение по умолчанию UpdateRowSource равно Both, если команда не генерируется автоматически (как в случае SqlCommandBuilder), и в этом случае по умолчанию используется значение None.

Это здорово и все, но всякий раз, когда я пытаюсь изменить это свойство в своем приложении, он прекращает выполнение в этой строке, но не генерирует исключение.

Есть ли у кого-нибудь предложения? Я хотел бы продолжать использовать построитель команд, но мне также нужно, чтобы значения идентификатора автоинкремента были параллельными.

FdaPoints.SelectCommand.CommandText = "SELECT * FROM points;"
FdaPoints.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord

благодаря

спросил(а) 2021-01-25T16:04:41+03:00 4 месяца, 4 недели назад
1
Решение
63

Я нашел этот ответ несколько месяцев назад и забыл обновить свой собственный вопрос. Вы можете добавить команду вставки компилятора команды с помощью этого оператора SQL:

SELECT ID = SCOPE_IDENTITY()

Итак, в конце код выглядит примерно так:

            Dim da As New SqlDataAdapter("", conn)
Dim cmd As New SqlCommand
cmd = SQLCommandBldr.GetInsertCommand.Clone
cmd.CommandText += "; SELECT ID = SCOPE_IDENTITY()"
cmd.UpdatedRowSource = UpdateRowSource.Both
da.InsertCommand = cmd
da.UpdateCommand = SQLCommandBldr.GetUpdateCommand.Clone
da.DeleteCommand = SQLCommandBldr.GetDeleteCommand.Clone
da.Update(YourDataTable)
da.Dispose()

ответил(а) 2021-01-25T16:04:41+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема