Dans le cadre d’un effort visant à arrêter d’utiliser la génération SQL dynamic et à encourager l’utilisation de variables de liaison, je rencontre certains problèmes.
J’interroge une firebase database Oracle 9i à partir d’une page ASP.NET à l’aide de fournisseurs de données Oracle pour .NET
La requête est
sql = "SELECT somedata FROM sometable WHERE machine = :machineName ";
Je définis le paramètre Oracle comme suit
OracleParameter parameter = new OracleParameter(); parameter.ParameterName = "machineName"; parameter.OracleDbType = OracleDbType.Varchar2; parameter.Value = machine; //machine is a variable of type ssortingng parameterList.Add(parameter);
Cela fonctionne très bien pour l’opérateur “=”. Mais je n’arrive tout simplement pas à le faire fonctionner avec “LIKE”. Je ne sais pas comment formater la requête pour qu’elle accepte l’utilisation du caractère générique “%”.
J’ai essayé:
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||% ";
et aussi:
parameter.Value = machine+'%';
mais tout ce que j’ai, ce sont des exceptions ORA-00911 (caractère illégal) et ORA-01036 (nom / valeur illégal).
Qu’est-ce que je fais mal?
Essayer:
sql = "SELECT somedata FROM sometable WHERE machine LIKE :machineName || '%' ";
En raison de la variable BIND, il ne serait pas nécessaire qu’elle soit entourée de guillemets simples. Mais le% n’est pas, alors je m’attendrais à ce qu’il doive être encapsulé.