Récupération de l'ID d'un enregistrement SQL Server nouvellement inséré avec C# MVC 4
Problème :
Comment insérer des données dans une table SQL Server à l'aide de C# dans une application MVC 4, puis obtenir l'ID de l'enregistrement nouvellement ajouté ?
Solution :
Il existe deux approches principales, selon votre version de SQL Server :
SQL Server 2005 et versions ultérieures :
La méthode la plus efficace pour SQL Server 2005 et les versions ultérieures exploite la clause OUTPUT
:
<code class="language-csharp">using (SqlCommand cmd = new SqlCommand("INSERT INTO Mem_Basic(Mem_Na, Mem_Occ) OUTPUT INSERTED.ID VALUES (@na, @occ)", con)) { // ... parameter assignments for @na and @occ ... int newId = (int)cmd.ExecuteScalar(); return newId; }</code>
Cette unique instruction SQL insère les données et renvoie immédiatement l'ID nouvellement généré.
Anciennes versions de SQL Server (avant 2005) :
Pour les anciennes versions de SQL Server, vous avez besoin d'une requête en deux parties : une instruction INSERT
suivie de SCOPE_IDENTITY()
:
<code class="language-csharp">using (SqlCommand cmd = new SqlCommand("INSERT INTO Mem_Basic(Mem_Na, Mem_Occ) VALUES (@na, @occ); SELECT SCOPE_IDENTITY();", con)) { // ... parameter assignments for @na and @occ ... int newId = Convert.ToInt32(cmd.ExecuteScalar()); return newId; }</code>
Cette approche insère d'abord les données, puis utilise SCOPE_IDENTITY()
pour récupérer l'ID de la dernière ligne insérée dans la session et la portée en cours. Notez que SCOPE_IDENTITY()
ne fonctionne que pour la session et la portée en cours, donc si plusieurs insertions se produisent simultanément, vous pouvez obtenir des résultats inattendus.
N'oubliez pas de remplacer Mem_Basic
, Mem_Na
et Mem_Occ
par les noms réels de vos tables et colonnes. Assurez-vous également d’un paramétrage approprié pour éviter les vulnérabilités d’injection SQL. Les sections // ...
indiquent où vous devez ajouter votre code de paramétrage à l'aide de cmd.Parameters.AddWithValue(...)
.
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!