Ответ 1
Предложение OUTPUT?
string query = "INSERT INTO SocialGroup (created_by_fbuid)
OUTPUT INSERTED.IDCol --use real column here
VALUES (@FBUID)";
...
int lastId = (int)command.ExecuteScalar();
public static void CreateSocialGroup(string FBUID)
{
string query = "INSERT INTO SocialGroup (created_by_fbuid) VALUES (@FBUID); SELECT @@IDENTITY AS LastID";
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@FBUID", FBUID);
connection.Open();
command.ExecuteNonQuery();
}
}
Правильно ли это сделать? И как мне получить LastID в переменную? Благодаря
Предложение OUTPUT?
string query = "INSERT INTO SocialGroup (created_by_fbuid)
OUTPUT INSERTED.IDCol --use real column here
VALUES (@FBUID)";
...
int lastId = (int)command.ExecuteScalar();
Вы можете использовать ExecuteScalar для получения последнего значения из Sqlcommand.
Функция scope_identity() более безопасна, чем идентификатор @@.
Если ваш сервер поддерживает OUTPUT clause
, вы можете попробовать его с помощью этого:
public static void CreateSocialGroup(string FBUID)
{
string query = "INSERT INTO SocialGroup (created_by_fbuid) OUTPUT INSERTED.IDENTITYCOL VALUES (@FBUID)";
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@FBUID", FBUID);
connection.Open();
var _id = command.ExecuteScalar();
}
}
Лично я бы переписал код для использования параметров. Вы можете использовать параметр InputOutput
или параметр Output
. Однако использование возвращаемого значения в вашем SQL также будет работать.
Полные примеры этого можно найти в MSDN.
Я бы также использовал Scope_Identity()
, а не @@Identity
, это обеспечит вам идентификацию, относящуюся к текущей транзакции. Подробнее о Scope_Identity можно найти здесь.
U может попробовать ExecuteScalar для получения значения LastID.
Я бы рекомендовал использовать хранимую процедуру для этого. Вы можете указать параметр OUTPUT
, который вы можете использовать для возврата значения id обратно в ваше приложение.
Используйте Stored Procedure
только для запросов и используйте SCOPE_IDENTITY
для получения максимального значения.
SqlCommand command = new SqlCommand("select max(id) from SocialGroup ", connection);
int lastId = (int)command.ExecuteScalar();