asp.net InsertCommand для возврата последнего идентификатора вставки

StackOverflow https://stackoverflow.com/questions/1486377

Вопрос

Я не могу получить последний вставленный идентификатор из базы данных SQL Server 2000, используя типизированный набор данных в asp.NET.

Я создал адаптер таблицы и отметил галочками «Обновить таблицу данных» и «Создать операторы вставки, обновления и удаления».При этом автоматически создаются методы Fill и GetData, а также операторы Insert, Update, Select и Delete.

Я перепробовал все возможные решения в этой теме

http://forums.asp.net/t/990365.aspx

но мне все еще не удалось, он всегда возвращает 1 (= количество затронутых строк).Я не хочу создавать отдельный метод вставки, поскольку автоматически сгенерированная команда вставки идеально соответствует моим потребностям.

Как было предложено в теме выше, я попытался обновить синтаксис SQL InsertCommand, добавив SELECT SCOPY_IDENTITY() или что-то подобное, я попытался добавить параметр типа ReturnValue, но все, что я получил, это количество затронутых строк.

Есть ли у кого-то другое мнение по этому поводу?Заранее спасибо!Стейн

Это было полезно?

Решение

Я успешно нашел способ получить добавочный идентификатор после вставки, используя мой табличный адаптер.

Мой подход немного отличается, я использую процедуру хранения для создания insert, поэтому моя команда insert содержит все значения, кроме ID, я заставил sp возвращать ID, просто вызывая:УСТАНОВИТЕ @ID=SCOPE_IDENTITY() и затем ЗАФИКСИРУЙТЕ ПЕРЕХОД и последней строкой будет RETURN @ID

Затем я поискал в параметрах своего табличного адаптера InsertCommand и установил @RETURNVALUE в столбец инкрементного идентификатора таблицы, поэтому при его выполнении автоматически помещаю возвращаемое значение в поле id.

Надеюсь, это поможет

Другие советы

Я решил сдаться, я не могу позволить себе больше тратить на это время.Я использую оператор Insert, после чего выполняю запрос select MAX(id), чтобы получить идентификатор вставки.

Если у кого-то есть решение, буду рад прочитать его здесь.

Спасибо, Стиджн

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top