SQL कथनों के साथ लिपटा जाने sp_executesql
का कारण SqlCommand.Commandtype
संपत्ति की सेटिंग और कमांड में किसी भी पैरामीटर को पारित करना है।
SqlCommand cmd = new SqlCommand("proc1", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@param1", 1);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
उपरोक्त कोड इस T-SQL के साथ समाप्त होता है:
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();
यह कोड निम्नलिखित T- SQL के निष्पादन के साथ समाप्त होता है:
exec sp_executesql N'proc1',N'@param1 int',@param1=1
जोड़ 23.12.15: एक CommandType.Text
कमांड का उपयोग करना , परिणाम समान हैं: जैसे ही कमांड ऑब्जेक्ट में एक पैरामीटर जोड़ा जाता है, .NET पूरी क्वेरी को इसमें लपेट देगा sp_executesql
और मापदंडों को पास करेगा।
जोड़: गहरा गोता sp_executesql
लगाने के बाद, .NET क्लास के इस व्यवहार को पूरी तरह से समझने के लिए पैरामीटर सूँघना और योजना बनाना उच्च क्रम क्वेरी संकलन और योजनाओं की संख्या से बचने के लिए पूरी तरह से समझ में आता है। तो यह मूल रूप से एक बेहतर SQL सर्वर प्रदर्शन सुनिश्चित करने के लिए डिज़ाइन किया गया है, जबकि यह एक ही समय में कुछ प्रश्नों (पैरामीटर सूंघने का मुद्दा) के खराब प्रदर्शन को जन्म दे सकता है जो कि प्रारंभिक बनाए गए क्वेरी प्लान की तुलना में विभिन्न पैरामीटर मानों के साथ उपयोग किए जाते हैं।
देख:
उपरोक्त नमूना .NET फ्रेमवर्क 4.5 और SQL सर्वर 2008 डेवलपर संस्करण का उपयोग करके बनाया गया था।