
В этой заметке покажу как в 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());
Молодец. Всё чётко, кратко и ясно. А главное — полезно.
Проще выполнить запрос command.ExecuteScalar(«INSERT INTO Users (FirstName, LastName) VALUES («FirstName», «LastName»); SELECT SCOPE_IDENTITY()»)