Dalam C#, memasukkan berbilang baris ke dalam pangkalan data boleh menjadi proses yang memakan masa jika setiap baris memerlukan INSERT yang berasingan kenyataan. Untuk mengoptimumkan prestasi, adalah wajar untuk memasukkan berbilang baris dalam satu pertanyaan sambil turut menggunakan pertanyaan berparameter untuk menghalang serangan suntikan SQL.
Untuk mencapai ini, anda boleh memanfaatkan kuasa parameter bernilai jadual, yang membolehkan anda untuk menghantar jenis data berstruktur (seperti Jadual Data) kepada prosedur tersimpan. Ini membolehkan anda memasukkan berbilang baris dengan satu arahan.
Untuk melaksanakan pendekatan ini, ikut langkah berikut:
Buat UDT untuk mewakili baris yang ingin anda masukkan. Contohnya, jika anda mempunyai lajur "Col1" dan "Col2", anda boleh mencipta UDT seperti berikut:
CREATE TYPE MyTableType AS TABLE ( Col1 int, Col2 varchar(20) ) GO
Buat prosedur tersimpan untuk menerima UDT sebagai parameter:
CREATE PROCEDURE MyProcedure ( @MyTable dbo.MyTableType READONLY -- Table valued parameters must be ReadOnly! ) AS INSERT INTO MyTable (Col1, Col2) SELECT Col1, Col2 FROM @MyTable GO
Isi Jadual Data dengan data anda:
DataTable dt = new DataTable(); dt.Columns.Add("Col1", typeof(int)); dt.Columns.Add("Col2", typeof(string)); // Populate data
Buka sambungan dan laksanakan prosedur tersimpan menggunakan SqlCommand:
using (var con = new SqlConnection("ConnectionString")) { using(var cmd = new SqlCommand("MyProcedure", con)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@MyTable", SqlDbType.Structured).Value = dt; con.Open(); cmd.ExecuteNonQuery(); } }
Oleh menggunakan parameter bernilai jadual dan prosedur tersimpan, anda boleh meningkatkan prestasi sisipan pukal dengan ketara, sementara juga mengekalkan keselamatan dan kecekapan pertanyaan berparameter.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memasukkan Data Pukal dengan Cekap dengan Pertanyaan Berparameter dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!