Retrieving the ID of a Newly Inserted SQL Server Record with C# MVC 4
Problem:
How do you insert data into a SQL Server table using C# in an MVC 4 application and then obtain the ID of the newly added record?
Solution:
There are two primary approaches, depending on your SQL Server version:
SQL Server 2005 and later:
The most efficient method for SQL Server 2005 and subsequent versions leverages the OUTPUT
clause:
<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>
This single SQL statement inserts the data and immediately returns the newly generated ID.
Older SQL Server Versions (pre-2005):
For older SQL Server versions, you need a two-part query: an INSERT
statement followed by 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>
This approach first inserts the data and then uses SCOPE_IDENTITY()
to retrieve the ID of the last inserted row within the current session and scope. Note that SCOPE_IDENTITY()
only works for the current session and scope, so if multiple inserts happen simultaneously, you may get unexpected results.
Remember to replace Mem_Basic
, Mem_Na
, and Mem_Occ
with your actual table and column names. Also, ensure proper parameterization to prevent SQL injection vulnerabilities. The // ...
sections indicate where you should add your parameter assignment code using cmd.Parameters.AddWithValue(...)
.
The above is the detailed content of How to Retrieve the ID of a Newly Inserted Record in SQL Server using C# MVC 4?. For more information, please follow other related articles on the PHP Chinese website!