C# 在C中向OracleCommand.Parameters添加字符串列表#

C# 在C中向OracleCommand.Parameters添加字符串列表#,c#,oracle,ado.net,C#,Oracle,Ado.net,以下查询有一个参数,要用字符串列表指定: select * from a_table where something in :list_of_strings 我有一个C#列表,我想将其分配给字符串的列表参数 给定一个OracleCommand(表示上述查询),如何将我的列表绑定到命令的列表字符串参数?实际上,您不能将单个参数绑定到值列表。在这种情况下,您可以将值连接到查询字符串。 但是,这是不可取的,因为在子句中,您可以在上设置一个值的限制 List<string> list =

以下查询有一个参数,要用字符串列表指定:

select * from a_table where something in :list_of_strings
我有一个C#
列表
,我想将其分配给字符串的
列表
参数


给定一个
OracleCommand
(表示上述查询),如何将我的
列表
绑定到命令的
列表字符串
参数?

实际上,您不能将单个参数绑定到值列表。在这种情况下,您可以将值连接到查询字符串。
但是,这是不可取的,因为在子句中,您可以在
上设置一个值的限制

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"
Obs:您可能必须处理列表为空的可能性

另一种可能是在临时表中插入所有值,并在select语句中使用它。与串联技术相比,它的优点是不受限制的字符串值,并避免在DBMS上进行新的硬解析:

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

不确定这个问题是否类似。这可能会对您有所帮助。小心点。如果不清理列表参数,则会打开SQL注入。
string query = string.Format("select * from a_table where something in({0})", listStr);
SELECT * 
    FROM A_TABLE 
   WHERE SOMETHING IN(SELECT SOMETHING FROM TEMP_TABLE)