2010-09-24 32 views
12

作爲努力停止使用動態SQL生成並鼓勵使用綁定變量的一部分,我遇到了一些問題。在C#中LIKE中使用Oracle綁定變量

我從一個ASP.NET頁面使用Oracle數據提供程序.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(非法名稱/值)例外。

我在做什麼錯?

+0

重複此問題:http://stackoverflow.com/questions/1412023/constructing-a-good-search-query-using-system-data-oracleclient – CodingGorilla 2010-09-24 19:48:32

回答

24

嘗試:

sql = "SELECT somedata FROM sometable WHERE machine LIKE :machineName || '%' "; 

因爲綁定變量的,就並不需要它周圍的單引號。但%不是,所以我期望它需要被封裝。

+0

您,先生,是正確的。這確實是最後的選擇,我錯過了。謝謝! – 2010-09-24 20:00:34

+0

非常感謝你的回答!我正在使用oracle數據庫驅動程序處理一個節點項目,並且遇到同樣的問題。出於好奇,我如何在通配符運算符(%)之前需要兩個管道(||)? – 2015-07-23 03:46:54

+2

@DaveCooper ||連接'%',它是一個連接命令。 – 2015-07-26 00:43:21