我想创建此查询:
select * from products where number in ('123', '234', '456');
但我找不到任何使用Npgsql和NpgsqlParameter实现此功能的示例。我试过这样:
string[] numbers = new string[] { "123", "234" };
NpgsqlCommands cmd = new NpgsqlCommands("select * from products where number in (:numbers)");
NpgsqlParameter p = new NpgsqlParameter("numbers", numbers);
command.Parameters.Add(p);
但它不起作用;)
答案 0 :(得分:27)
将其作为数组传递:
string[] numbers = new string[] { "123", "234" };
NpgsqlCommands cmd = new NpgsqlCommands("select * from products where number = ANY(:numbers)");
NpgsqlParameter p = new NpgsqlParameter("numbers", NpgsqlDbType.Array | NpgsqlDbType.Text);
p.value = numbers;
command.Parameters.Add(p);
答案 1 :(得分:1)
您需要动态创建命令字符串 - 使用您的第一个参数循环:num0,second as:num1等。当您添加所有这些参数时,删除最后一个字符“,”并将其替换为“)”
答案 2 :(得分:0)
除了@Quassnoi回答之外,我还要添加一个来展示,我们是如何在实际代码中完成的。
警告!这个工作代码来自真实的项目,可能会破坏你的美丽方法!
string commstr = "SELECT product_name, price, product_url, image_url FROM products WHERE id = ANY(@arr);";
NpgsqlCommand cm = new NpgsqlCommand(commstr, cn);
NpgsqlParameter arpar = new NpgsqlParameter();
arpar.ParameterName = "arr";
arpar.NpgsqlDbType = NpgsqlDbType.Array | NpgsqlDbType.Bigint;
arpar.Value = PerformQuerySphinx(query, limit);
cm.Parameters.Add(arpar);
答案 3 :(得分:0)
使用“从测试中删除ID IN(选择unnest(@ids))的地方”