使用 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中文網其他相關文章!