sql - Dapper: Procedure or function has too many arguments specified -
एक संग्रहीत कार्यविधि को कॉल करने के लिए डैपर का प्रयोग करते समय, मुझे निम्न त्रुटि प्राप्त हो रही है:
मैं क्वेरी को सरल पैरामीटर की सूची जोड़ने के लिए DynamicParameters का उपयोग कर रहा हूं।
पैरामीटर कोड इस प्रकार दिखता है:
var पैरामीटर = नया डायनेमिक पारामेटर्स (); मापदंडों। जोड़ें (पी। नाम, पी। वेल, दिशा: पी.मोड);
क्वेरी कोड इस प्रकार दिखता है:
var परिणाम = _connection.Query & lt; T & gt; (string.Format ("{0}। {1} ", Request.SchemaName, request.StoredProcedureName), मापदंडों, कमांड टाइप करें: कमांडटाइप। स्टोटेड प्रोक्रिडर, ट्रांजैक्शन: _ ट्रांज़ैक्शन);
प्रोफाइलर में निष्पादन एसक्यूएल निम्न के रूप में दिखाता है:
exec dbo.storedProcedureName @ पैरामीटर नाम 1 = N'ParameterName ', @ पैरामीटर नाम 2 = N'ParameterName' , @ RemoveUnused = 1
@ पैरामीटर नाम 1 बिल्कुल नहीं है कि पैरामीटर कैसे कहा जाता है। दरअसल, नामों के रूप में नामों के रूप में पारित किया जा रहा है (N'ParameterName ')। @RemoveUnused पैरामीटर पूरी तरह से मेरे लिए यादृच्छिक लगता है, क्योंकि यह कॉलिंग कोड में बिल्कुल भी नहीं होता है।
इस के लिए पूर्ण कोड यहां पाया जा सकता है: 61 और 228 लाइन पर।
< P> संपादित करें: मैंने पाया है कि इस मुद्दे को दो बार दो बार, अलग-अलग परिणाम सेट के साथ कॉल करने के कारण होता है। इसलिए पहली बार मैं इसे क्वेरी के साथ बुला रहा हूं, क्वेरी के साथ दूसरी बार। इस परिदृश्य में डापर को परेशानी क्यों हो रही है, यह अभी भी एक रहस्य है।
मैं इसे पुन: उत्पन्न नहीं कर सकता:
<पूर्व> सार्वजनिक शून्य SO25069578_DynamicParams_Procs () {var पैरामीटर = नया DynamicParameters (); Parameters.Add ("foo", "bar"); Try {connection.Execute ("drop proc SO25069578"); } पकड़ {} connection.Execute ("proc SO25069578 @ फु न्यूवर्चार (अधिकतम) के रूप में चुनें [foo] के रूप में [एक्स]"); Var tran = connection.BeginTransaction (); // gist प्रयुक्त लेनदेन; हालांकि वही पंक्ति = कनेक्शन। सीएक्स & lt; HazX & gt; ("SO25069578", मापदंडों, कमांड टाइप: कमांडटाइप। स्टोटेड प्रोक्रिडर, लेनदेन: ट्रॅन)। सिंगल (); tran.Rollback (); row.X.IsEqualTo ( "बार"); } सार्वजनिक वर्ग HazX {सार्वजनिक स्ट्रिंग X {get; सेट; }}
ठीक काम करता है है एक RemoveUnused
पर संपत्ति DynamicParameters
, बिट: गतिशील मापदंडों का उपयोग करते समय, जो नहीं जोड़ा जाना चाहिए । मैंने टेम्पलेट आधारित कंस्ट्रक्टर का उपयोग करने की कोशिश की है:
पैरामीटर = नया डायनेमिक पैरामीटर (मापदंड);
लेकिन फिर से: यह ठीक काम करता है क्या यह संभव है कि आप डापर का एक वाकई, वास्तव में पुरानी संस्करण का उपयोग कर रहे हैं? आप किस संस्करण का उपयोग कर रहे हैं?
Comments
Post a Comment