Question

Je me connecte avec succès à une base de données Oracle 10g avec un pilote Microsoft ODBC pour Oracle.

Les requêtes standard sans paramètres fonctionnent correctement, mais les requêtes paramétrées agissent comme si les paramètres n'étaient pas transmis.

ex.

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

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

--odbc string parameter 'test'

Voici à quoi ressemble ma chaîne de connexion:

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

Et j'ajoute des paramètres à ma commande ODBC comme ceci:

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

...

cmd.Parameters.AddRange(arrOdbcParam)

Pardonnez le code partiellement pseudo-partiellement copié.

Était-ce utile?

La solution

Un peu de nécromancie ici, mais comme je viens de me débattre avec un problème similaire, voici comment cela fonctionne avec le pilote ODBC pour 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();

Ceci effectue une recherche dans la "table". pour les enregistrements de la valeur 12345 dans " searchInt " et la date d'aujourd'hui dans "serachDat".
Choses à noter:

  • Les paramètres sont marqués comme ? dans le Commande SQL
  • Les paramètres n'ont pas besoin de nom, mais la position (et le type correct) sont important

Autres conseils

Les paramètres ODBC (marqués du symbole ? ) sont liés par la position. Vous devez donc vous assurer que vous ajoutez les OdbcParameter dans le bon ordre. Leur nom est alors sans importance, mais je suggérerais paramName , sans le @ qui est un format de nom spécifique à SQL Server (ou plutôt Microsoft).

Vous pouvez également essayer d'utiliser le format de paramètre Oracle, qui devrait être reconnu par le pilote Microsoft ODBC pour Oracle et vous autoriserait à effectuer une liaison par nom (mais pas à 100%, cependant):

  • Remplacez ? par : nomParam dans votre requête.
  • Nommez votre paramètre paramName .

Essayez d’utiliser ": paramName " au lieu de "paramName".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top