SQL deyimlerinin paketlenmesinin nedeni, özelliğin sp_executesql
ayarlanması ve herhangi bir Parametrenin komuta iletilmesidir.SqlCommand.Commandtype
SqlCommand cmd = new SqlCommand("proc1", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@param1", 1);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
Yukarıdaki kod bu T-SQL ile biter:
exec proc1 @param1=1
SqlCommand cmd = new SqlCommand("proc1", con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@param1", 1);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
Bu kod, aşağıdaki T-SQL'in yürütülmesi ile sona erer:
exec sp_executesql N'proc1',N'@param1 int',@param1=1
Ek 23.12.15: Bir CommandType.Text
komut kullanarak sonuçlar benzer: Komut nesnesine bir parametre eklenir eklenmez, .NET tüm sorguyu sarar sp_executesql
ve parametreleri ona iletir .
Ekleme: Daha derinlemesine daldıktan sonra sp_executesql
, parametre koklama ve .NET sınıflarının bu davranışını önbelleğe almanın planlanması, yüksek sık sorgu derlemesi ve plan sayısından kaçınmak için tamamen mantıklıdır. Bu nedenle, temel olarak daha iyi bir SQL Server performansı sağlamak için tasarlanmıştır, ancak aynı zamanda ilk oluşturulan sorgu planından farklı parametre değerleriyle kullanılan bazı sorguların (parametre koklama sorunu) düşük performansına yol açabilir.
Görmek:
Yukarıdaki örnek, .NET Framework 4.5 ve SQL Server 2008 Developer Edition kullanılarak oluşturuldu.