2011-04-18 9 views
10

나는이 쿼리를 만들려면 :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); 

그러나 그것은 작동하지 않았다)

답변

21

패스를 배열로 : 당신은 동적 명령 문자열을 만들 필요가

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' 변수가'매개 변수 값 –

+0

@UwConcept에서 numbers'해야한다 : 나는 마지막'NPgSQL'를 사용하고도 가지고 있지 않기 때문에 정직하게, 그것은 긴 시간이다 'VS'가 설치된 것을 확인했습니다 :) – Quassnoi

+0

@Adrian : 문법이 정상입니까? 아니면 수정해야합니까? 나는 확인할 수 없다. – Quassnoi

1

- 첫 번째와 루프 매개 변수는 다음과 같습니다 : num0, second as : num1 등. 모두 추가 한 경우 마지막 문자 ","를 제거하고 ")"로 바꿉니다.

+0

Quassnoi가 제안한 방법으로 어레이를 사용할 수 있다면, 그걸로 알고있을 것입니다. –

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); 
관련 문제