使用@@ IDENTITY / scope_identity()时插入2行而不是1行

时间:2011-05-24 12:52:25

标签: c# sql sql-server

using (SqlConnection connection = new SqlConnection(ConnectionString))
    {
        string query = "INSERT INTO SocialGroup (created_by_fbuid) VALUES (@FBUID); SELECT CAST(scope_identity() AS int)";
        SqlCommand command = new SqlCommand(query, connection);
        command.Parameters.AddWithValue("@FBUID", FBUID);

        connection.Open();
        command.ExecuteNonQuery();

        int lastID = (int)command.ExecuteScalar();

    }

没有

SELECT CAST(scope_identity() AS int)

插入一行。但是因为我需要使用scope_identity从创建的行中获取ID。但是,当我使用它时,会创建2行而不是1行。

我错过了什么吗?

由于

3 个答案:

答案 0 :(得分:4)

您发布的代码中的问题是您运行了相同查询的2倍...一个使用 ExecuteNonQuery(); ,最后一个运行(int)命令.ExecuteScalar ();

如果你试图只使用executeScalar我认为你有你想要的结果......

尝试并希望这会有所帮助...

如果您愿意,可以使用参数来检索身份,就像在Article

中一样

答案 1 :(得分:0)

如果您在第一个问题中使用gbnmy回答,则问题不应发生。

答案 2 :(得分:0)

尝试

 using (SqlConnection connection = new SqlConnection(ConnectionString))     
    {         
    string query = "INSERT INTO SocialGroup (created_by_fbuid) VALUES (@FBUID);";         
    SqlCommand command = new SqlCommand(query, connection);            
    command.Parameters.AddWithValue("@FBUID", FBUID);         
     connection.Open();         
    command.ExecuteNonQuery();
     query = "SELECT CAST(scope_identity() AS int)";     
     command = new SqlCommand(query, connection);                   
    int lastID = (int)command.ExecuteScalar();      
    }