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();