我有一个类似的查询 从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()) {
}
}
但它抛出了一些错误......
有人可以帮忙吗?
答案 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,并将它们绑定到命令。