C# 将列表作为参数传递给oracle查询

C# 将列表作为参数传递给oracle查询,c#,oracle,sqlparameter,C#,Oracle,Sqlparameter,此代码适用于单个值的查询参数: public void GetById(long id) { var sql = "SELECT * FROM table1 WHERE id = :id"; using(var cmd = new OracleCommand(sql, oracleConnection)) { cmd.Parameters.Add(new OracleParameter("id", id)); ... } } 数组或值列表的等价物是什么 public

此代码适用于单个值的查询参数:

public void GetById(long id)
{
  var sql = "SELECT * FROM table1 WHERE id = :id";
  using(var cmd = new OracleCommand(sql, oracleConnection)) {
    cmd.Parameters.Add(new OracleParameter("id", id));
    ...
  }
}
数组或值列表的等价物是什么

public void GetByIds(long[] ids)
{
  var sql = "SELECT * FROM table1 WHERE id IN (:ids)";
  using(var cmd = new OracleCommand(sql, oracleConnection)) {
    cmd.Parameters.Add(new OracleParameter("ids", /* ??? */));
    ...
  }
}
如果不清楚的话,我正在寻找这样的东西:

sql = "SELECT * FROM table1 WHERE id IN (" + string.Join(',', ids) + ")";

但是作为一个干净的参数化查询。

您可以将参数列表作为字符串发送,并使用常规表达式分隔id。例如:

select regexp_substr('SMITH,ALLEN,WARD,JONES','[^,]+', 1, level) from dual
所以


您可以将参数列表作为字符串发送,并使用常规表达式分隔id。例如:

select regexp_substr('SMITH,ALLEN,WARD,JONES','[^,]+', 1, level) from dual
所以


类似的问题:还有。@LukeWoodward找到这些问题做得很好-如果我的搜索结果是正确的,我会自己把它们联系起来。但所有的答案都非常复杂,其中很多都涉及到破解动态sql字符串(我试图避免的事情)或使用新的类型和函数修改数据库模式。。。通过数组会这么难吗?我已经决定使用来自的答案之一,现在我将尝试将此问题作为它的副本来结束。类似问题的可能副本:和。@Lukewoward找到这些问题做得很好-如果我的搜索发现了它们,我会自己链接它们。但所有的答案都非常复杂,其中很多都涉及到破解动态sql字符串(我试图避免的事情)或使用新的类型和函数修改数据库模式。。。传递数组会这么难吗?我决定使用来自的一个答案,现在我将尝试将此问题作为它的副本关闭。可能的副本我同意一个相关问题的评论:任何硬编码“,”字符是解决方案一部分的解决方案都无效。Oracle应该生成此文件,而不是应用程序。这也适用于任何类型的字符串分隔符““我同意其中一个相关问题的评论:硬编码的任何解决方案”,“字符是解决方案的一部分是无效的。Oracle应该生成它,而不是应用程序。这也适用于任何类型的字符串分隔符”