Получить идентификатор новой вставленной записи, используя SqlDataAdapter - PullRequest
1 голос
/ 05 декабря 2009
BGREX.BGREXDataTable _bRexDataTable = new BGREX.BGREXDataTable();
BGREX.BGREXRow bgRexRow = _bRexDataTable.NewBGREXRow();

bgRexRow.BGRes_TITLE = "abc";
bgRexRow.BGRes_VERSION = 123;

_bRexDataTable.AddBGREXRow(bgRexRow);
int rewEffected = Adapter.Update(_bRexDataTable);

Использовать выше, чтобы вставить запись в базу данных, работает отлично. Теперь мне нужен идентификатор (первичный ключ) вновь вставленной записи, которая генерируется автоматически, вместо строк, на которые повлияло возвращение из

Adapter.Update(_bRexDataTable);

Похоже, мне нужна функция SCOPE_IDENTITY (), но я не уверен, где включить это в конструктор, так как дизайнеры недовольны следующим синтаксисом, добавленным к фактическому запросу вставки. Он прекрасно работает в консоли управления sqlserver, хотя

DECLARE @ROWI_D int

INSERT INTO TABLE
.....
.....
.....         
VALUES
("val1","val2",.......................)

SET ROW_ID = SCOPE_IDENTITY()

Ответы [ 2 ]

2 голосов
/ 05 декабря 2009

Я не уверен, как это сделать, используя команды SQL с командами. Я не говорю, что это невозможно сделать, я просто никогда не работаю с утверждениями, всегда через sprocs.

с помощью хранимых процедур вы можете определить выходной параметр, который вы можете установить равным SCOPE_IDENTITY() в sproc, а затем убедиться, что вы передаете этот параметр в команду, устанавливая его направление в качестве выходного.

извините, у меня нет решения для прямого вызова sql, но, возможно, кто-то другой с большим опытом работы будет таким.

вот ссылка на ветку, в которой обсуждается эта же тема и возможный ответ. но нет проверки, сработало ли предложенное решение.

1 голос
/ 05 декабря 2009

Лучший способ сделать это - перейти к хранимой процедуре, которая возвращает значение, которое вы хотите в параметре. Опубликуйте код для обновления, которое у вас сейчас есть, и я (или кто-то еще) покажу вам, как выполнить рефакторинг для использования хранимой процедуры. Это не сложно.

...