SQL Server和C#:获取最后插入的id

时间:2011-05-24 11:24:09

标签: c# sql-server

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输入变量?感谢

9 个答案:

答案 0 :(得分:26)

OUTPUT子句?

string query = "INSERT INTO SocialGroup (created_by_fbuid) 
                OUTPUT INSERTED.IDCol  --use real column here
                VALUES (@FBUID)";
...
int lastId = (int)command.ExecuteScalar();

答案 1 :(得分:10)

您可以使用ExecuteScalar从Sqlcommand获取最后一个值。

scope_identity()函数比@@ identity更安全。

答案 2 :(得分:8)

如果您的服务器支持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();
    }
}

答案 3 :(得分:5)

就个人而言,我会重新编写代码以使用参数。您可以使用InputOutput参数或Output参数。但是,在SQL中使用返回值也可以。

关于此can be found on MSDN的完整示例。

我还会使用Scope_Identity()而不是@@Identity,这样可以确保您会显示与当前交易相关的ID。有关Scope_Identity can be found here的详细信息。

答案 4 :(得分:3)

你可以尝试使用ExecuteScalar来获取LastID值。

答案 5 :(得分:2)

我建议使用存储过程来执行此操作。您可以为其指定一个OUTPUT参数,您可以使用该参数将ID值返回给您的应用。

答案 6 :(得分:0)

cmd = new SqlCommand("Insert into table values (1,2,3); SELECT SCOPE_IDENTITY()", conn);

lastRecord = cmd.ExecuteScalar().ToString();

答案 7 :(得分:-3)

仅对查询使用Stored Procedure,并使用SCOPE_IDENTITY获取最大值。

答案 8 :(得分:-16)

SqlCommand command = new SqlCommand("select max(id) from SocialGroup ", connection);
int lastId = (int)command.ExecuteScalar();