下面的查詢有一個參數與字符串列表分配:添加一個字符串列表來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
參數?
下面的查詢有一個參數與字符串列表分配:添加一個字符串列表來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
參數?
實際上,您不能將單個參數綁定到值列表。在這種情況下,您可以將值連接到查詢字符串。
但是,這是因爲有一個限制你可以在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)
小心點。如果你沒有清理你的列表參數,你可以打開自己的SQL注入。 – 2016-05-23 20:21:42
如果不知道這個問題是類似http://stackoverflow.com/questions/6155146/問題使用的oracle參數在選擇或不選擇。 – 2013-02-10 14:43:09
這可能對你有所幫助。 http://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:139812348065 – OldProgrammer 2013-02-10 17:11:33