[英]Usage of Oracle binding variables with LIKE in C#
作為停止使用動態 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(非法名稱/值)異常。
我做錯了什么?
嘗試:
sql = "SELECT somedata FROM sometable WHERE machine LIKE :machineName || '%' ";
由於 BIND 變量,因此不需要在它周圍加上單引號。 但是 % 不是,所以我希望它需要被封裝。
這是一個完整的查詢示例:
string commandText = "SELECT LastName, FirstName FROM PEOPLE WHERE UPPER(LastName) LIKE '%' || :lastName || '%' AND UPPER(FirstName) LIKE '%' || :firstName || '%'";
string oradb = "yourDatabaseConnectionStringHere"; // Might want to add Using statement for this code and try catch
OracleConnection conn = new OracleConnection(oradb); // C#
conn.Open();
OracleCommand cmd = new OracleCommand
{
Connection = conn,
CommandText = commandText,
CommandType = CommandType.Text
};
/*IMPORTANT: adding parameters must be in order how they are in order in the SQL statement*/
cmd.Parameters.Add(new OracleParameter("lastName", model.LastName.Trim().ToUpper()));
cmd.Parameters.Add(new OracleParameter("firstName", model.FirstName.Trim().ToUpper()));
OracleDataReader dr = cmd.ExecuteReader();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.