SQL Server和C#:获取最后插入的id
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()函数比@@ identity更安全。
如果您的服务器支持OUTPUT clause
您可以尝试使用此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
这将确保您将显示与当前事务相关的ID。 有关Scope_Identity的详细信息,请访问此处 。
您可以尝试使用ExecuteScalar获取LastID值。
我建议使用存储过程来执行此操作。 您可以给它一个OUTPUT
参数,您可以使用该参数将id值返回给您的应用程序。
仅对查询使用Stored Procedure
,并使用SCOPE_IDENTITY
获取最大值。
SqlCommand command = new SqlCommand("select max(id) from SocialGroup ", connection); int lastId = (int)command.ExecuteScalar();