2013-02-10 39 views
4

下面的查詢有一個參數與字符串列表分配:添加一個字符串列表來OracleCommand.Parameters在C#

select * from a_table where something in :list_of_strings 

我有一個C#List<string>我想分配給list_of_strings參數。

鑑於OracleCommand(代表上述查詢),我如何將我的List<string>綁定到命令的list_of_strings參數?

+0

如果不知道這個問題是類似http://stackoverflow.com/questions/6155146/問題使用的oracle參數在選擇或不選擇。 – 2013-02-10 14:43:09

+0

這可能對你有所幫助。 http://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:139812348065 – OldProgrammer 2013-02-10 17:11:33

回答

4

實際上,您不能將單個參數綁定到值列表。在這種情況下,您可以將值連接到查詢字符串。
但是,這是因爲有一個限制你可以在IN條款上的值的限制。

List<string> list = new List<string>(); 
list.Add("1"); 
list.Add("2"); 
list.Add("3"); 
list.Add("4"); 

string listStr = string.Join(",", list); 
//result: "1,2,3,4" 

如果你的字符串列表是一個字符串列表,你可以這樣做:

List<string> list = new List<string>(); 
list.Add("one"); 
list.Add("two"); 
list.Add("three"); 
list.Add("four"); 

string listStr = string.Concat("'", string.Join("','", list), "'"); 
//result: "'one','two','three','four'" 

查詢字符串:

string query = string.Format("select * from a_table where something in({0})", listStr); 

觀測值:您可能需要處理的可能性,其中該列表是空的。

另一種可能性是將所有值插入臨時表並在select語句中使用它。這將有無限的字符串值的優勢,避免對DBMS一個新的硬解析相比串接技術:

SELECT * 
    FROM A_TABLE 
    WHERE SOMETHING IN(SELECT SOMETHING FROM TEMP_TABLE) 
+2

小心點。如果你沒有清理你的列表參數,你可以打開自己的SQL注入。 – 2016-05-23 20:21:42

相關問題