मैं स्ट्रिंग-आधारित पैरामीटर इंजेक्शन के बजाय नामित पैरामीटर का उपयोग करने का एक बड़ा प्रशंसक हूं। यह एसक्यूएल इंजेक्शन के अधिकांश रूपों के खिलाफ टाइप-सुरक्षित और सुरक्षित है। पुराने एडीओ.NET में, मैं अपनी क्वेरी के लिए एक SQLCommand ऑब्जेक्ट और SqlParameters का एक समूह बनाउंगा।डीबीसेट <T> का उपयोग करते समय .SqlQuery(), नामित पैरामीटर का उपयोग कैसे करें?
var sSQL = "select * from Users where Name = @Name";
var cmd = new SqlCommand(conn, sSQL);
cmd.Parameters.AddWithValue("@Name", "Bob");
cmd.ExecuteReader();
अब, इकाई की रूपरेखा में, यह (इस लिंक पर) प्रकट होता है एक सरल String.Format बयान और स्ट्रिंग इंजेक्शन फिर से करने के लिए वहीं की है: (चर्चा के लिए सरलीकृत)
MyRepository.Users.SqlQuery("Select * from Users where Name = {0}", "Bob");
वहाँ एक है एंटिटी फ्रेमवर्क DbSqlQuery क्लास के साथ नामित पैरामीटर का उपयोग करने का तरीका?
var param = new ObjectParameter("p0", "Bob");
MyRepository.Users.SqlQuery("Select * from Users where Name = :p0", param);
आप जब एक ObjectParameter instantiating नाम पर एक विराम लगाना नहीं है:
यह दस्तावेज कहां है? और SQL बॉडी में कौन से नाम स्वरूप स्वीकार्य हैं? क्या यह @name शैली का समर्थन नहीं कर सकता है? –
@EricFalsken। आप [यहां एमएसडीएन में] देख सकते हैं (http://msdn.microsoft.com/en-us/library/system.data.objects.objectparameter.aspx), ** यह \ @name शैली समर्थित है **। – gdoron
बिल्कुल सही! बहुत बहुत धन्यवाद! –