如何将参数传递给sql'in'语句?
问题描述:
我想创建此查询:如何将参数传递给sql'in'语句?
select * from products where number in ('123', '234', '456');
,但我不能找到和Npgsql的NpgsqlParameter achiving本的任何实例。我想是这样的:
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);
,但它没有工作;)
答
把它作为一个数组:
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);
答
您需要动态地创建命令字符串 - 循环与第一参数为:num0,第二个为:num1等。添加完所有参数后,删除最后一个字符“,”并将其替换为“)”。
+0
如果你可以按照Quassnoi的建议使用数组,那么我就可以使用它。 – 2011-04-18 10:31:09
答
除了@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);
这将产生一个错误:你'array'变量应该是'在参数值 – 2011-04-18 10:31:02
@UwConcept numbers':说实话,这是一个很长的时间,因为我最后一次使用'NPgSQL',甚至不具备安装一个'VS'来检查:) – Quassnoi 2011-04-18 10:32:59
@Adrian:语法正确,或者你必须纠正它?我无法检查。 – Quassnoi 2011-04-18 11:18:55