次のクエリには、文字列のリストを割り当てるパラメーターがあります。
select * from a_table where something in :list_of_strings
List<string>
パラメータに割り当てたいC#がありlist_of_strings
ます。
(上記のクエリを表す)が与えられた場合、 myをコマンドのパラメーター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);
Obs: リストが空である可能性を処理する必要があるかもしれません。
もう 1 つの可能性は、すべての値を一時テーブルに挿入し、それを select ステートメントで使用することです。連結手法と比較して、無制限の文字列値と DBMS での新しいハード解析を回避できるという利点があります。
SELECT *
FROM A_TABLE
WHERE SOMETHING IN(SELECT SOMETHING FROM TEMP_TABLE)