Как получить первичный ключ строки, которую я только что вставил в набор типизированных данных в .net? - PullRequest
2 голосов
/ 21 апреля 2010

У меня есть некоторый код VB.net, который вставляет данные в мою базу данных SQL, используя типизированный набор данных следующим образом:

dim usersTa As New administratorUsersTableAdapters.Authorized_UsersTableAdapter usersTa.Connection = New Data.SqlClient.SqlConnection(MY_CONNECTION_STRING) usersTa.Insert (first_name, last_name)

В базе данных есть первичный ключ, по которому я идентифицирую строки.Как наиболее эффективно узнать первичный ключ строки, которую я только что вставил при запуске этого кода?

Ответы [ 4 ]

3 голосов
/ 21 апреля 2010

Я предполагаю, что вы выполняете какой-то SQL в методе Authorized_UsersTableAdapter.Insert().

Для возврата идентификатора вы используете SCOPE_IDENTITY().

Пример, если ваш идентификатор - Int.

Dim conn As SqlConnection = ...
Dim cmd As New SqlCommand(INSERT INTO T (Name) VALUES('Test')" & ChrW(13) & ChrW(10) & "SELECT SCOPE_IDENTITY() As TheId", conn)
Dim tId As Integer = CInt(cmd.ExecuteScalar)
1 голос
/ 21 февраля 2011

Есть библиотека, Kailua - Забытые методы в API ADO.NET., который предоставляет эти и дополнительные метаданные для 5 крупнейших поставщиков.Эта информация зависит от поставщика.

Оберните ваше соединение в net.windward.utils.ado.WrCommand и используйте функцию ExecuteInsert.

1 голос
/ 21 апреля 2010

Если вы используете хранимые процедуры, вы можете получить это значение как возвращаемое значение хранимой процедуры.

См. этот ТАК вопрос и ответы (лучший способ получить идентичность вставленной строки?), Относящиеся к стороне SQL этого.

0 голосов
/ 23 апреля 2010

Вам нужно сообщить адаптеру таблицы вашего стола, чтобы обновить таблица данных после операции обновления / вставки. Вот как вы можете это сделать.

  1. Откройте свойства TableAdapter -> Default Select Query -> Advnaced options . и отметьте опцию Обновить таблицу данных . Сохраните адаптер сейчас. Теперь при вызове update для таблицы-адаптера таблица данных будет обновлена ​​[обновлена] после операции обновления / вставки и будет отражать последние значения из таблицы базы данных. если для первичного ключа или любого столбца установлено автоматическое увеличение, таблица данных будет иметь это последнее значение после последнего обновления.

  2. Теперь вы можете вызвать обновление как TableAdapterObj.Update (ds.dataTable);

  3. Считать последние значения из столбцов DataTable (ds.dataTable) и назначить соответствующие значения в дочернюю таблицу перед обновлением / вставкой . Это будет работать именно так, как вы хотите.

альтернативный текст http://ruchitsurati.net/files/tds1.png

...