Domanda

Mi collego con successo a un Oracle 10g DB con un driver Microsoft ODBC per Oracle.

Le query regolari senza parametri funzionano correttamente, ma le query con parametri funzionano come se i parametri non venissero passati.

es.

--this works fine
Select * from tbl1 where column1 = 'test'

--this doesn't
select * from tbl1 where column1 = ?

--odbc string parameter 'test'

Ecco come appare la mia stringa di connessione:

"Driver={Microsoft ODBC for Oracle}; " & _
 "CONNECTSTRING=(DESCRIPTION=" & _
 "(ADDRESS=(PROTOCOL=TCP)" & _
 "(HOST=" & pstrServer & ")(PORT=" & pintPort.ToString & "))" & _
 "(CONNECT_DATA=(SERVICE_NAME=" & pstrPhysicalName & "))); " & _
 "uid=" & pstrUserName & ";pwd=" & pstrPassword & ";"

E sto aggiungendo parametri al mio comando ODBC in questo modo:

arrOdbcParam(index) = New OdbcParameter("@paramName", paramValue)

...

cmd.Parameters.AddRange(arrOdbcParam)

Perdona il codice parzialmente copiato, in qualche modo pseuedo.

È stato utile?

Soluzione

Un po 'di necromance qui, ma poiché ho appena lottato con un problema simile, ecco come ha funzionato con il driver ODBC per Centura SQLBase:

OdbcCommand com = con.CreateCommand();
com.CommandText = @"
  SELECT  thing
  FROM    table
  WHERE   searchInt = ? AND searchDat = ?";
com.Parameters.Add(new OdbcParameter("", OdbcType.Int)).Value = 12345;
com.Parameters.Add(new OdbcParameter("", OdbcType.DateTime)).Value = DateTime.Now;
OdbcDataReader reader = com.ExecuteReader();

Cerca in " tabella " per i record con il valore 12345 in " searchInt " e la data odierna in "serachDat".
Cose da notare:

  • I parametri sono contrassegnati come ? in Comando SQL
  • I parametri non hanno bisogno di un nome, ma position (e il tipo corretto) sono importante

Altri suggerimenti

I parametri ODBC (contrassegnati dal simbolo ? ) sono vincolati dalla posizione, quindi è necessario assicurarsi di aggiungere OdbcParameter nell'ordine corretto. Il loro nome non è quindi importante, ma suggerirei paramName , senza @ che è un formato di nome specifico di SQL Server (o, piuttosto, Microsoft).

Potresti anche provare a utilizzare il formato dei parametri Oracle, che dovrebbe essere riconosciuto dal driver Microsoft ODBC per Oracle e ti permetterebbe invece di legare per nome (non sicuro al 100% su questo, però):

  • Sostituisci ? con : paramName nella tua query.
  • Assegna un nome al tuo parametro paramName .

Prova a utilizzare ": paramName " invece di " paramName " ;.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top