Как получить ID последней вставленной записи в ADO.NET

SQL

В этой заметке покажу как в ADO.NET можно получить ID последней вставленной записи в базу данных. Это может пригодиться когда вставив одну сущность, вам необходимо выполнить еще ряд SQL запросов зная какой именно ID был сгенерирован для этой сущности (например автоинкрементом).

Допустим, мы хотим добавить нового пользователя в таблицу Users с помощью такого запроса:

INSERT INTO Users (FirstName, LastName)
VALUES ("FirstName", "LastName");

Но кроме самого факта вставки пользователя нам также интересен его ID (поле типа int с автоинкрементом).

Для этого после команды INSERT добавим дополнительную инструкцию SET:

INSERT INTO Users (FirstName, LastName)
VALUES ("FirstName", "LastName");
SET @INSERTED_ID=SCOPE_IDENTITY();

Как видим, параметр INSERTED_ID инициализируется значением возвращаемым Transact-SQL функцией SCOPE_IDENTITY().

Теперь при формировании объекта SqlCommand добавляем параметр INSERTED_ID, а после исполнения запроса получаем его значение:

var pID = new SqlParameter();
pID.ParameterName = "INSERTED_ID";
pID.Size = 4;
pID.Direction = ParameterDirection.Output;
command.Parameters.Add(pID);

command.ExecuteNonQuery();

int insertedID = Int32.Parse(pID.Value.ToString());

2 комментариев

  1. Роман:

    Молодец. Всё чётко, кратко и ясно. А главное — полезно.

  2. Михаил:

    Проще выполнить запрос command.ExecuteScalar(«INSERT INTO Users (FirstName, LastName) VALUES («FirstName», «LastName»); SELECT SCOPE_IDENTITY()»)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>