Mengambil ID Rekod yang Baru Dimasukkan dalam SQL Server dengan C#
Panduan ini menunjukkan cara untuk mendapatkan pengecam unik (ID) rekod yang baru dimasukkan dalam pangkalan data SQL Server menggunakan C# dalam aplikasi MVC 4 dengan cekap. Kod asal memerlukan pengubahsuaian untuk mencapai ini.
Kod Asal (Tidak Cekap):
<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>
Kod Yang Diperbaiki (dengan Pengambilan ID):
Contoh berikut menunjukkan cara untuk mendapatkan ID yang baru dijana. Pilih kaedah yang sesuai untuk versi SQL Server anda:
SQL Server 2005 dan kemudian (Disyorkan):
Kaedah ini menggunakan klausa OUTPUT INSERTED.ID
untuk prestasi optimum.
<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>
Versi Pelayan SQL Lama (Pra-2005):
Pendekatan ini menggunakan SCOPE_IDENTITY()
yang kurang cekap tetapi berfungsi pada versi lama.
<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>
Kedua-dua kaedah yang disemak menggunakan ExecuteScalar
untuk mendapatkan terus ID yang dijana. Kaedah SCOPE_IDENTITY()
hanya boleh digunakan jika anda terhad kepada versi SQL Server yang lebih lama. Untuk SQL Server 2005 dan lebih baru, kaedah OUTPUT INSERTED.ID
adalah jauh lebih cekap dan disyorkan.
Penting: Pastikan Mem_Basic
lajur ID jadual anda ditakrifkan sebagai lajur IDENTITY
dalam skema pangkalan data anda.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan ID Rekod yang Baru Dimasukkan dalam SQL Server menggunakan C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!