Получить значение идентификатора из первичного ключа вставленной записи - PullRequest
2 голосов
/ 14 марта 2011

Я не могу получить новое значение идентификатора из вставленной записи (через DataAdapter.Update) в моем DataRow.

Я использую набор данных со строгим типом в качестве DAL.Таблица, которую я хочу обновить, объединена с другими таблицами в SelectCommand, поэтому разработчик не может автоматически генерировать команды вставки / обновления / удаления, а также не может автоматически «обновлять таблицу данных» (s. http://msdn.microsoft.com/de-de/library/dex7k4dw%28v=VS.100%29.aspx).

).

Я пытался установить AutoIncrement = true / false для DataColumn первичного ключа, но результат тот же: последний MAX-ID + 1 вместо фактического идентификатора, сгенерированного базой данных (SQL-Server 2005 EP; тип данных pk: int, Is identity: yes, Identity Increment: 1).

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

Чтобы получить новый идентификатор из базы данных, я добавил следующее к командному тексту моей команды вставки:

;SELECT CAST (SCOPE_IDENTITY() AS int) AS newIdRMA 

Также я попытался добавить параметр-выход к его параметру-collection: enter image description here

Это часть моего кода, который обновляет базу данных и устанавливает новый идентификатор (который не работает):

 Me.dsRMA.RMA.AddRMARow(newRMA) ' adding new row to the (strong typed) DataTable ' 
 numRowsUpdated = daRMA.Update(Me.dsRMA.RMA) ' update via DataAdapter and insert the new record in DB '
 DirectCast(Page, Services).IdRma = newRMA.IdRMA ' this is not the actual value from DB but old Max-ID +1 '

Редактировать:

Это снимок экрана InsertCommand моего TableAdapter и его набора параметров: enter image description here

Заранее спасибо.

1 Ответ

4 голосов
/ 14 марта 2011

Вот как я это делаю: я добавляю следующее к CommandText моей команды вставки:

--Return the new id
SELECT SCOPE_IDENTITY() 

Затем я устанавливаю " ExecuteMode " этого запроса на "Скаляр"вместо" NonQuery"

Query Properties window

, чтобы я мог получить его таким образом:

newRMA = Me.dsRMA.RMA.AddRMARow()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...