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