Apabila menggunakan prosedur tersimpan dalam C#, adalah perkara biasa untuk menemui kod seperti berikut:
string sql = "GetClientDefaults"; SqlCommand cmd = new SqlCommand(sql); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@computerName", computerName);
Namun, persoalan timbul: Adakah baris cmd.CommandType = CommandType.StoredProcedure; perlu, dan apakah implikasi yang berpotensi untuk tidak menggunakannya?
Menurut ujian prestasi, SQL Server melakukan parameterisasi tidak kira sama ada anda menggunakan CommandType.Text atau CommandType.StoredProcedure. Walau bagaimanapun, apabila menggunakan CommandType.StoredProcedure, parameterisasi dilakukan dengan lebih cekap oleh SQL Server. Ini menghasilkan kelebihan kelajuan untuk menggunakan CommandType.StoredProcedure.
Apabila menggunakan CommandType.Text, adalah penting untuk memasukkan nama parameter dalam CommandText itu sendiri. Ini kerana pembungkus sp_executesql, yang digunakan oleh SQL Server untuk meparameterkan pernyataan, tidak secara automatik melepasi nama parameter. Oleh itu, anda mesti menentukannya secara manual untuk memastikan pelaksanaan yang betul.
Sebagai contoh, jika anda mencipta prosedur seperti ini:
create procedure dbo.Test ( @Text1 varchar(10) = 'Default1' ,@Text2 varchar(10) = 'Default2' ) as begin select @Text1 as Text1, @Text2 as Text2 end
Dan kemudian memanggilnya menggunakan CommandType.Text, anda mesti memasukkan nama parameter dalam CommandText:
string callText = "dbo.Test @Text1, @Text2";
Jika tidak, anda akan menghadapi ralat yang menunjukkan bahawa parameter yang ditentukan ialah tidak dibekalkan.
Ringkasnya:
Atas ialah kandungan terperinci Adakah `cmd.CommandType = CommandType.StoredProcedure;` Diperlukan Apabila Melaksanakan Prosedur Tersimpan dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!