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

    } 

Sans le2 lignes insérées au lieu de 1 pour l'utilisation de @@ IDENTITY/SCOPE_IDENTITY()

SELECT CAST(scope_identity() AS int) 

Une ligne est insérée. Mais puisque j'ai besoin de l'ID de la ligne créée im en utilisant scope_identity. Cependant, quand j'utilise ceci, 2 lignes sont créées au lieu d'une.

Ai-je raté quelque chose?

Merci

Répondre

4

Le problème dans le code que vous avez posté est que vous exécutez 2 fois la même requête ... une avec ExecuteNonQuery(); et le dernier avec (int) command.ExecuteScalar();

Si vous essayez d'utiliser seulement le ExecuteScalar je pense que vous avez-vous est le résultat .... voulez

Essayez et nous espérons que cela aide ...

Si vous voulez, vous pouvez utiliser des paramètres pour récupérer l'identité, comme ils le font dans ce Article

0

Si vous utilisez gbn ou my réponse de votre première question, le problème ne devrait pas se produire.

+0

Essayé la SORTIE, même résultat cependant. – Johan

+0

Peu importe, oublié d'enlever la commande. ExecuteNonQuery() ;. Merci – Johan

0

Essayez de faire

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