動的 SQL 生成の使用を停止し、バインド変数の使用を奨励する取り組みの一環として、いくつかの問題に直面しています。
Oracle Data Providers for .NET を使用して、ASP.NET ページから Oracle 9i データベースにクエリを実行しています。
クエリは
sql = "SELECT somedata FROM sometable WHERE machine = :machineName ";
Oracle パラメータを次のように定義します。
OracleParameter parameter = new OracleParameter();
parameter.ParameterName = "machineName";
parameter.OracleDbType = OracleDbType.Varchar2;
parameter.Value = machine; //machine is a variable of type string
parameterList.Add(parameter);
これは、「=」演算子では問題なく機能します。しかし、「LIKE」で機能させることができないようです。「%」ワイルドカードの使用を受け入れるようにクエリをフォーマットする方法がわかりません。
私が試してみました:
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||% ";
また:
parameter.Value = machine+'%';
しかし、ORA-00911 (不正な文字) と ORA-01036 (不正な名前/値) の例外しか表示されません。
私は何を間違っていますか?