使用 C# 检索 SQL Server 中新插入的记录 ID
本指南演示如何在 MVC 4 应用程序中使用 C# 高效检索 SQL Server 数据库中新插入记录的唯一标识符 (ID)。 需要修改原始代码才能实现此目的。
原始代码(低效):
<code class="language-csharp">public class MemberBasicData { public int Id { get; set; } public string Mem_NA { get; set; } public string Mem_Occ { get; set; } } public int CreateNewMember(string Mem_NA, string Mem_Occ ) { using (SqlConnection con=new SqlConnection(Config.ConnectionString)) { using(SqlCommand cmd=new SqlCommand("INSERT INTO Mem_Basic(Mem_Na,Mem_Occ) VALUES(@na,@occ)",con)) { cmd.Parameters.AddWithValue("@na", Mem_NA); cmd.Parameters.AddWithValue("@occ", Mem_Occ); con.Open(); int modified = cmd.ExecuteNonQuery(); if (con.State == System.Data.ConnectionState.Open) con.Close(); return modified; } } }</code>
改进的代码(带 ID 检索):
以下示例展示了如何检索新生成的 ID。 选择适合您的 SQL Server 版本的方法:
SQL Server 2005 及更高版本(推荐):
此方法使用 OUTPUT INSERTED.ID
子句以获得最佳性能。
<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 newId = (int)cmd.ExecuteScalar(); if (con.State == System.Data.ConnectionState.Open) con.Close(); return newId; }</code>
旧版 SQL Server 版本(2005 年之前):
此方法使用 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)) { cmd.Parameters.AddWithValue("@na", Mem_NA); cmd.Parameters.AddWithValue("@occ", Mem_Occ); con.Open(); int newId = Convert.ToInt32(cmd.ExecuteScalar()); if (con.State == System.Data.ConnectionState.Open) con.Close(); return newId; }</code>
两种修改后的方法都使用ExecuteScalar
直接检索生成的ID。 仅当您受限于较旧的 SQL Server 版本时才应使用 SCOPE_IDENTITY()
方法。 对于 SQL Server 2005 及更高版本,OUTPUT INSERTED.ID
方法效率明显更高,建议使用。
重要提示: 确保您的 Mem_Basic
表的 ID 列定义为数据库架构中的 IDENTITY
列。
以上是如何使用 C# 检索 SQL Server 中新插入记录的 ID?的详细内容。更多信息请关注PHP中文网其他相关文章!