Я обычно использую хранимую процедуру при вставке записей, чтобы убедиться, что получаю правильное значение scope_identity (). У меня есть требование получить поле идентификатора вставленной записи при использовании SqlClient.
Насколько я понимаю, если я объединю команду scope_identity () со вставкой, то она все равно будет в той же области, что и команда вставки? Что-то вроде ниже. Трудно проверить, хотя ... Получу ли я 100% правильное значение идентификатора с этим ..?
(поле id - это автоинкрементный bigint - Sql Server)
long newid = 0;
using (SqlConnection conn = new SqlConnection(....))
{
conn.Open();
using (SqlCommand comm = new SqlCommand ("insert into .... ; select SCOPE_IDENTITY();", conn))
{
SqlDataReader reader = comm.ExecuteReader();
if (reader.HasRows)
{
reader.Read();
newid = Convert.ToInt64(reader[0]);
}
}
}