2009-09-25 15 views
15

मैं पिछले 40 मिनट से इस क्वेरी को डिबग कर रहा हूं, और समस्या स्पष्ट रूप से पैरामीटर का क्रम है।OleDbCommand पैरामीटर ऑर्डर और प्राथमिकता

SELECT * FROM tblSomeThing WHERE id = @id AND debut = @dtDebut AND fin = @dtFin 

फिर मैं इस तरह के पैरामीटर जोड़ता हूं, ध्यान दें कि दो अंतिम पैरामीटर स्विच किए गए हैं, मुझे कोई परिणाम नहीं मिला है।

cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete; 
cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin; 
cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut; 

जब मैं मानदंडों को घोषित करता हूं कि वे कतार में दिखाई देते हैं तो सब कुछ पूरी तरह से काम करता है।

मैंने सोचा कि नामित पैरामीटर इस समस्या को हल करने के लिए पहले स्थान पर थे! मुझे यहां क्या समझ नहीं आ रहा है?

आप

उत्तर

29

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx OleDbCommand के अनुसार पैरामीटर

नामित समर्थन नहीं करता OLE DB नेट प्रदाता नहीं एक एसक्यूएल बयान या एक संग्रहीत प्रक्रिया एक OleDbCommand से बुलाया करने के लिए पैरामीटर प्रदान करने के लिए जब CommandType के लिए निर्धारित है के लिए नामित किया पैरामीटर का समर्थन पाठ। इस मामले में, प्रश्न चिह्न (?) प्लेसहोल्डर का उपयोग किया जाना चाहिए। उदाहरण के लिए:

SELECT * FROM Customers WHERE CustomerID = ? 

इसलिए, जिस क्रम में OleDbParameter वस्तुओं OleDbParameterCollection से जुड़ जाते हैं सीधे आदेश पाठ में पैरामीटर के लिए प्रश्न चिह्न प्लेसहोल्डर की स्थिति के अनुरूप होना चाहिए।

तो पैरामीटर का क्रम महत्वपूर्ण है।

+4

बिज़ारे, इसलिए पैरामीटर के नाम के अंत में क्वेरी में कुछ भी नहीं है !! – 0xFF

0

नहीं सकारात्मक धन्यवाद, लेकिन यह नहीं लगता है अपने मानकों की तरह उसी क्रम में जुड़ जाते हैं, और न ही के रूप में अपने "@" क्वेरी के समकक्षों एक ही नाम दिया मूल्यों ...

@id, 
@dtDebut 
then 
@dateTraitementFin 
+0

हाँ, यह मेरा सवाल है, मुझे क्वेरी में @ जैसा ही क्रम के साथ उन्हें क्यों जोड़ना है? – 0xFF

3

यदि मुझे सही ढंग से याद किया जाता है, तो OleDbCommand एडीओ.NET कार्यों में पुराने एडीओ लाइब्रेरी/पुस्तकालयों (वीबी 6, वीबीए, आदि में उपयोग किया जाता है) के समान होता है तो पैरामीटर संग्रह नाम से पैरामीटर को परिभाषित नहीं करता है, केवल संग्रह के भीतर स्थिति के अनुसार । ऐसा लगता है कि आप जिस व्यवहार का अनुभव कर रहे हैं।