如何将参数传递给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); 
+0

这将产生一个错误:你'array'变量应该是'在参数值 – 2011-04-18 10:31:02

+0

@UwConcept numbers':说实话,这是一个很长的时间,因为我最后一次使用'NPgSQL',甚至不具备安装一个'VS'来检查:) – Quassnoi 2011-04-18 10:32:59

+0

@Adrian:语法正确,或者你必须纠正它?我无法检查。 – Quassnoi 2011-04-18 11:18:55

您需要动态地创建命令字符串 - 循环与第一参数为: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);