2010-09-24 17 views
12

Come parte di uno sforzo per interrompere l'utilizzo della generazione dinamica di SQL e incoraggiare l'uso di variabili di bind, sto riscontrando alcuni problemi.Utilizzo di variabili di binding Oracle con LIKE in C#

Annunciare la mia interrogazione di un database Oracle 9i da una pagina ASP.NET utilizzando Provider Oracle di dati per NET

La query è

sql = "SELECT somedata FROM sometable WHERE machine = :machineName "; 

ho definire il parametro di Oracle come segue

OracleParameter parameter = new OracleParameter(); 
parameter.ParameterName = "machineName"; 
parameter.OracleDbType = OracleDbType.Varchar2; 
parameter.Value = machine; //machine is a variable of type string 
parameterList.Add(parameter); 

Funziona bene per l'operatore "=". Ma proprio non riesco a farlo funzionare con "LIKE". Non so come formattare la query in modo che accetti l'utilizzo del carattere jolly "%".

ho provato:

sql = "SELECT somedata FROM sometable WHERE machine LIKE :machineName% "; 
sql = "SELECT somedata FROM sometable WHERE machine LIKE ':machineName%' "; 
sql = "SELECT somedata FROM sometable WHERE machine LIKE :machineName||% "; 

e anche:

parameter.Value = machine+'%'; 

ma tutto quello che ottiene sono ORA-00911 (carattere illegale) e Ora-01036 (illegale nome/valore) eccezioni.

Cosa sto sbagliando?

+0

Duplicato di questa domanda: http://stackoverflow.com/questions/1412023/constructing-a-good-search-query-using-system-data-oracleclient – CodingGorilla

risposta

24

Prova:

sql = "SELECT somedata FROM sometable WHERE machine LIKE :machineName || '%' "; 

A causa della variabile BIND, non ci sarebbe bisogno di essere virgolette singole intorno ad esso. Ma il% non lo è, quindi mi aspetto che debba essere incapsulato.

+0

Lei, signore, è corretto. Questa era davvero l'ultima opzione, quella che mi mancava. Grazie! –

+0

Grazie mille per questa risposta! Sto lavorando su un progetto di nodo con un driver di database Oracle e ho riscontrato lo stesso problema. Solo per curiosità, come mai ho bisogno delle due pipe (||) prima dell'operatore jolly (%)? –

+2

@DaveCooper il || concatena il '%', è un comando per la concatenazione. –