2011-05-24 49 views
1
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(); 

    } 

当没有2行使用@@ IDENTITY/SCOPE_IDENTITY()

SELECT CAST(scope_identity() AS int) 

一个行插入插入的1代替。但是因为我需要使用scope_identity创建的行im的ID。但是,当我使用它时,会创建2行而不是1行。

我错过了什么吗?

感谢

回答

4

您发布的代码中存在的问题是,您运行2次相同的查询......其中一个与ExecuteNonQuery();,最后一个是(int)command.ExecuteScalar();

如果您尝试只使用的ExecuteScalar我认为你有结果的,你想....

尝试,并希望这有助于...

如果你愿意,你可以使用参数来检索身份,就像他们在这个Article

0

如果你会使用gbnmy回答你第一个问题,不应该发生的问题。

+0

试过输出,相同的结果,但这样做。 – Johan 2011-05-24 13:03:59

+0

没关系,忘记删除command.ExecuteNonQuery();.谢谢 – Johan 2011-05-24 13:10:17

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