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
,则可以通过以下方法尝试:
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值。     
我建议使用存储过程来执行此操作。您可以为其指定一个“ 8”参数,该参数可用于将ID值返回给您的应用。     
cmd = new SqlCommand(\"Insert into table values (1,2,3); SELECT SCOPE_IDENTITY()\", conn);

lastRecord = cmd.ExecuteScalar().ToString();
    
仅对查询使用“ 10”,并使用“ 11”获得最大值。     
SqlCommand command = new SqlCommand(\"select max(id) from SocialGroup \", connection);
int lastId = (int)command.ExecuteScalar();
    

要回复问题请先登录注册