5

次のクエリには、文字列のリストを割り当てるパラメーターがあります。

select * from a_table where something in :list_of_strings

List<string>パラメータに割り当てたいC#がありlist_of_stringsます。

(上記のクエリを表す)が与えられた場合、 myをコマンドのパラメーターOracleCommandにバインドするにはどうすればよいですか?List<string>list_of_strings

4

1 に答える 1

6

実際には、単一のパラメーターを値のリストにバインドすることはできません。この場合、値をクエリ文字列に連結できます。
ただし、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)
于 2013-02-10T14:59:27.327 に答える