2009-07-16 8 views
5

Attualmente sto lavorando su un progetto ASP classico che parla con un database Oracle. Sto cercando di trovare un modo per chiamare in modo sicuro uno script Oracle PL/SQL e passare i parametri con ADO. La soluzione attualmente costruisce lo script SQL a mano con variabili integrate come questo:Chiamare una query Oracle con parametri da ADODB in ASP classico

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

Questo, naturalmente, è brutto e insicuro, e ad abusi.

Il codice che ho finora (trafugato da vari siti web basati ASP classico non) si presenta così:

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 

Questo fa sì che l'oggetto Parameter errore”viene impropriamente definito. Sono state fornite informazioni incomplete o incomplete "

Qual è il metodo corretto per chiamare Oracle/PL/SQL con i parametri denominati da ADO? Ho bisogno di utilizzare i parametri denominati perché il codice SQL effettivo è un po 'più complesso e diversi parametri vengono utilizzati più volte in tutto il comando SQL.

+0

Provare a commentare la riga con NamedParameters = True e vedere se questo aiuta. – shahkalpesh

+0

stai usando Option Explicit e hai incluso qualche tipo di file adovbs.inc per le costanti "ad"? – Funka

+0

Sì, ho provato entrambi con e senza la proprietà NamedParameters e sto includendo adovbs.inc. Uso sempre l'opzione esplicita – Buzzrick

risposta

2

Come è stato definito filter_value? Se non è dichiarato come una stringa o se hai assegnato una stringa più lunga di 10 caratteri (come hai indicato durante la creazione del parametro), avrai problemi con questo.

Inoltre (e in parte per il mio riferimento), parametri denominati non sono supportati tramite OraOLEDB (cioè ADODB).

Vedi Oracle® Provider for OLE DB Developer's Guide 11g Release 1 (11.1) o seguire il "Comando Parametri" voce collegamento su uno dei previous versions (8iR3, 9i, 9iR2, 10g, 10gR2):

Comando Parametri

Quando si utilizza Oracle ANSI SQL, i parametri nel testo del comando sono preceduti da un due punti . In ODBC SQL, i parametri sono indicati da un punto interrogativo (?).

OraOLEDB supporta ingresso, uscita e parametri di input e output per PL/SQL stored procedure e stored funzioni. OraOLEDB supporta i parametri di input per le istruzioni SQL.

"Nota: OraOLEDB supporta solo il binding di posizione ."

Ciò detto, questo dovrebbe avere alcuna incidenza sulla query quando si utilizza OraOLEDB:

oFilteredList.NamedParameters = True 

Ho avuto successo l'esecuzione di query esattamente come il resto del tuo esempio mostra anche su Oracle 10gR2.

Non viene mostrata la stringa di connessione, quindi devo supporre che sia valida. Il comportamento può variare a seconda delle opzioni disponibili, quindi ecco cosa utilizzo correttamente:

`"Provider=OraOLEDB.Oracle;Data Source=TNSNAMES_ENTRY;User ID=XXXX;Password=YYYY;DistribTx=0;"` 
Problemi correlati