2012-10-17 13 views
6

मैं स्ट्रिंग-आधारित पैरामीटर इंजेक्शन के बजाय नामित पैरामीटर का उपयोग करने का एक बड़ा प्रशंसक हूं। यह एसक्यूएल इंजेक्शन के अधिकांश रूपों के खिलाफ टाइप-सुरक्षित और सुरक्षित है। पुराने एडीओ.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 नाम पर एक विराम लगाना नहीं है:

उत्तर

4
var param = new ObjectParameter(":p0", "Bob"); 
MyRepository.Users.SqlQuery("Select * from Users where Name = :p0", param); 
+0

यह दस्तावेज कहां है? और SQL बॉडी में कौन से नाम स्वरूप स्वीकार्य हैं? क्या यह @name शैली का समर्थन नहीं कर सकता है? –

+0

@EricFalsken। आप [यहां एमएसडीएन में] देख सकते हैं (http://msdn.microsoft.com/en-us/library/system.data.objects.objectparameter.aspx), ** यह \ @name शैली समर्थित है **। – gdoron

+0

बिल्कुल सही! बहुत बहुत धन्यवाद! –

2

जब से मैं टिप्पणी नहीं कर सकता, मैं अन्य जवाब फिक्सिंग कर रहा हूँ। यही कारण है कि एसएलसी ने अपनी टिप्पणी में उल्लिखित त्रुटि प्राप्त की।

संबंधित मुद्दे