2010-01-18 5 views
1

J'ai créé un formulaire pour entrer des données dans une table dans ma base de données, maintenant je veux INSÉRER ces données, et récupérer l'ID (qui est un numéro automatique) de la enregistrement qui vient d'être ajouté. J'ai la partie INSERT qui marche très bien, et j'ai cliqué sur "SELECT SCOPE_IDENTITY();" à la fin de cela, mais maintenant je dois récupérer le nombre retourné.Utilisation de scope_identity() avec les contrôles ASP.NET

À l'heure actuelle tout cela est fait avec une SqlDataSource (avec l'instruction "INSERT" étant mis ensemble et tiré par un certain C# dans le fichier codebehind, qui prend des données d'un formulaire sur la page).

Existe-t-il un moyen rapide d'attraper ce nombre et de le mettre dans une variable?

Répondre

2

SQLDataSource utilise ExecuteNonQuery interne ce qui signifie que vous ne pouvez pas récupérer la valeur directement. Une solution de contournement consiste à passer un paramètre de sortie à la liste des paramètres d'insertion de votre SqlataSource, puis à définir la valeur renvoyée par SCOPE_IDENTITY dans cette variable. La valeur de la variable peut être extraite de l'événement Inserted.

C'est,

  1. Ajout d'un paramètre de sortie appelé Identity Insérer un paramètre de votre SQLDataSource déclarative
  2. Remplacer "SELECT SCOPE_IDENTITY();" à la fin de l'instruction d'insertion avec "SET @Identity = SCOPE_IDENTITY();"
  3. Maintenant, la valeur du paramètre @Identity peuvent être récupérées en cas "Inséré" comme suit:

    vide SqlDataSource1_Inserted protégé (expéditeur d'objet, SqlDataSourceStatusEventArgs e) {

    //Read the value of the @Identity OUTPUT parameter 
    int lastID = e.Command.Parameters["@Identity"].Value; 
    ... 
    

    }

+0

Merci, que semble avoir travaillé! – Chris

1

Je crois que ce code peut aider:

protected void SqlDataSource1_Inserted(object sender, SqlDataSourceStatusEventArgs e) 
    { 
     //Read the value of the @Identity OUTPUT parameter 
     string sID = e.Command.Parameters["@Identity"].Value.ToString(); 

     //Display new ID 
     Label1.Text = sID; 
    } 

C'était de this blog post

Questions connexes