2009-07-16 17 views
5

में एडीओडीबी से पैरामीटरयुक्त ओरेकल क्वेरी को कॉल करें मैं वर्तमान में ओरेकल डेटाबेस से बात कर रहे क्लासिक एएसपी प्रोजेक्ट पर काम कर रहा हूं। मैं ओरेकल पीएल/एसक्यूएल स्क्रिप्ट को सुरक्षित रूप से कॉल करने और एडीओ के साथ पैरामीटर पास करने का एक तरीका ढूंढने की कोशिश कर रहा हूं। वर्तमान में समाधान इस तरह एम्बेडेड चर के साथ हाथ से SQL स्क्रिप्ट बनाता है:क्लासिक एएसपी

strSQL = "SELECT field1, etc FROM my_table WHERE (field = '" & filter_value & "')" 

यह, ज़ाहिर है, बदसूरत और असुरक्षित और यौन शोषण से खुला है।

कोड मैं अब तक (विभिन्न गैर क्लासिक एएसपी आधारित वेब साइटों से purloined) है कि इस तरह दिखता है:

dim strSQL, oConn, oCommand, oParam 
set oConn = server.createobject("ADODB.Connection") 
oConn.Open myConnString 

strSQL = "SELECT field1, etc FROM my_table WHERE (field = :filter_field)" 

dim oFilteredList 
set oFilteredList = Server.CreateObject("ADODB.Command") 
oFilteredList.ActiveConnection = oConn 
oFilteredList.CommandText = strSQL 
oFilteredList.CommandType = adCmdText 
oFilteredList.NamedParameters = True 

set oParam = oFilteredList.CreateParameter("filter_field", adVarChar, adParamInput, 10, filter_value) 
oFilteredList.Parameters.Append oParam 

set rsResults = oFilteredList.Execute 

इस कारण त्रुटि "पैरामीटर वस्तु को अनुचित तरीके से परिभाषित किया गया है। असंगत या अपूर्ण जानकारी प्रदान की गई "

एडीओ से नामित पैरामीटर के साथ ओरेकल/पीएल/एसक्यूएल को कॉल करने का सही तरीका क्या है? मुझे नामित पैरामीटर का उपयोग करने की आवश्यकता है क्योंकि वास्तविक एसक्यूएल कोड कुछ और जटिल है, और विभिन्न पैरामीटर SQL कमांड में कई बार उपयोग किए जाते हैं।

+0

नामांकित पैरामीटर = ट्रू के साथ लाइन पर टिप्पणी करने का प्रयास करें और देखें कि क्या इससे मदद मिलती है। – shahkalpesh

+0

क्या आप विकल्प स्पष्टीकरण का उपयोग कर रहे हैं और क्या आपने अपने "विज्ञापन" स्थिरांक के लिए किसी प्रकार की adovbs.inc फ़ाइल शामिल की है? – Funka

+0

हां, मैंने नामांकित पैरामीटर संपत्ति के साथ और बिना दोनों की कोशिश की है, और मैं adovbs.inc सहित हूं। मैं हमेशा विकल्प का उपयोग स्पष्ट करता हूं – Buzzrick

उत्तर

2

आपके पास filter_value परिभाषित किया गया है? यदि इसे स्ट्रिंग के रूप में घोषित नहीं किया गया है या यदि आपने 10 वर्णों से अधिक स्ट्रिंग असाइन की है (जैसा कि आपने पैरामीटर बनाते समय इंगित किया है), तो आपको इसके साथ समस्याएं होंगी।

इसके अतिरिक्त (और आंशिक रूप से मेरे अपने संदर्भ के लिए), नाम वाले पैरामीटर OraOLEDB (अर्थात ADODB) के माध्यम से समर्थित नहीं हैं।

Oracle® Provider for OLE DB Developer's Guide 11g Release 1 (11.1) देखें या previous versions (8iR3, 9i, 9iR2, 10 ग्राम, 10gR2) में से किसी पर "कमांड पैरामीटर" शीर्षक लिंक का पालन करें:

ओरेकल एएनएसआई का उपयोग करते समय

कमान पैरामीटर एसक्यूएल, कमांड टेक्स्ट में पैरामीटर कोलन से पहले हैं। ओडीबीसी एसक्यूएल में, पैरामीटर एक प्रश्न चिह्न (?) द्वारा इंगित किया गया है। PL/SQL संग्रहित प्रक्रियाओं और संग्रहीत कार्यों के लिए

OraOLEDB इनपुट, आउटपुट का समर्थन करता है, और इनपुट और आउटपुट पैरामीटर। OraOLEDB SQL कथन के लिए इनपुट पैरामीटर का समर्थन करता है।

"नोट: ओराओएलडीबी केवल स्थितित्मक बाध्यकारी का समर्थन करता है।"

जिसके अनुसार, यह आपकी क्वेरी से कोई संबंध नहीं है जब OraOLEDB का उपयोग कर होना चाहिए:

oFilteredList.NamedParameters = True 

मैं चल पड़ा है सफलता प्रश्नों बिल्कुल के रूप में अपने उदाहरण के बाकी हालांकि ओरेकल 10gR2 पर पता चलता है।

आप अपनी कनेक्शन स्ट्रिंग नहीं दिखाते हैं, इसलिए मुझे इसे वैध मानना ​​चाहिए। व्यवहार विकल्पों के आधार पर भिन्न हो सकता है, इसलिए यहां मैंने सफलतापूर्वक उपयोग किया है:

`"Provider=OraOLEDB.Oracle;Data Source=TNSNAMES_ENTRY;User ID=XXXX;Password=YYYY;DistribTx=0;"` 
संबंधित मुद्दे