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

Joh*_*han 18 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?我如何将LastID输入变量?谢谢

gbn*_*gbn 26

OUTPUT条款?

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


fae*_*ter 10

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

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


Oli*_*ver 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();
    }
}
Run Code Online (Sandbox Code Playgroud)


cod*_*ger 5

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

有关这方面的完整示例可以在MSDN上找到.

我也会使用Scope_Identity()而不是@@Identity这将确保您将显示与当前交易相关的ID.有关Scope_Identity的详细信息,请访问此处.


var*_*jan 3

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