Récupération de l'ID inséré après une INSERT SQL en C# MVC 4
Cet article montre comment insérer des données en utilisant C# dans une application MVC 4 et récupérer l'ID de l'enregistrement nouvellement inséré. Alors que ExecuteNonQuery
indique le nombre de lignes concernées, l'obtention de l'ID inséré nécessite une approche différente.
La méthode la plus simple utilise ExecuteScalar
. Cependant, le résultat doit être explicitement converti en un entier :
<code class="language-csharp">int modified = (int)cmd.ExecuteScalar();</code>
Après une exécution réussie, modified
conservera l'ID nouvellement généré.
Pour SQL Server 2005 et versions ultérieures, l'utilisation du mot-clé OUTPUT
dans l'instruction INSERT
fournit une solution plus efficace :
<code class="language-csharp">using (SqlCommand cmd = new SqlCommand("INSERT INTO Mem_Basic(Mem_Na,Mem_Occ) OUTPUT INSERTED.ID VALUES(@na,@occ)", con)) { cmd.Parameters.AddWithValue("@na", Mem_NA); cmd.Parameters.AddWithValue("@occ", Mem_Occ); con.Open(); int modified = (int)cmd.ExecuteScalar(); if (con.State == System.Data.ConnectionState.Open) con.Close(); return modified; }</code>
Pour les anciennes versions de SQL Server, la fonction SCOPE_IDENTITY()
propose une alternative comparable :
<code class="language-csharp">using (SqlCommand cmd = new SqlCommand("INSERT INTO Mem_Basic(Mem_Na,Mem_Occ) VALUES(@na,@occ); SELECT SCOPE_IDENTITY();", con)) { cmd.Parameters.AddWithValue("@na", Mem_NA); cmd.Parameters.AddWithValue("@occ", Mem_Occ); con.Open(); int modified = Convert.ToInt32(cmd.ExecuteScalar()); if (con.State == System.Data.ConnectionState.Open) con.Close(); return modified; }</code>
Ces méthodes garantissent que vous récupérez avec précision l'ID de l'enregistrement inséré, quelle que soit la version de votre SQL Server. N'oubliez pas de gérer les exceptions potentielles de manière appropriée dans un environnement de production.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!