2011-05-24 43 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();  
    }