如何在where子句中将整数列表指定为oracle命令参数的参数值?

时间:2014-02-24 10:44:39

标签: c# .net oracle odp.net

我有一个类似的查询 从tablename中选择*,其中id为(:ids);

我想为上面的参数分配一个整数列表:ids。 我正在使用带有C#的ODP.Net。

The code snippet will be something like this

const String sql = Select * from tablename where id in (:ids);

using(OracleCommand cmd = new OracleCommand(sql, dbc)) {
cmd.Parameters.Add(:ids, OracleDbType.Int64, 12, Ids , ParameterDirection.Input);
using(OracleDataReader rdr = cmd.ExecuteReader()) {
}
}

但它抛出了一些错误......

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,你需要逐个绑定它们:

vat sql = string.Format("select * from tablename where id in ({0})", string.Join(",", ids.Select((v,i)=>":id"+i)));
using(OracleCommand cmd = new OracleCommand(sql, dbc)) {
    int pos = 0;
    foreach (var id in Ids) {
        cmd.Parameters.Add("id"+pos, OracleDbType.Int64, 12, id , ParameterDirection.Input);
        pos++;
    }
    using(OracleDataReader rdr = cmd.ExecuteReader()) {
        ...
    }
}

首先,构造一个看起来像"... where id in (id0, id1, id2, ...)"的SQL,然后在foreach循环中逐个查看实际ID,并将它们绑定到命令。