2009-08-28 3 views
1

쿼리를 실행하기 전에 모든 labnames를 저장하는 배열을 사용하여 다중 값 입력 매개 변수 (labnames 집합)를 사용하는 t-sql 쿼리를 사용하는 .aspx 페이지에서 작업하고 있습니다. .T-SQL 쿼리 내의 다중 값 매개 변수

다음 쿼리 매개 변수가 있습니다.

 With c.Parameters 
     .Add(New SqlParameter("@sdate", sdate.text)) 
     .Add(New SqlParameter("@edate", edate.text)) 
     .Add(New SqlParameter("@labname", SqlDbType.Text)).Value = labnamesparam.ToString 
    End With 

그러나 아직 한 개의 labname (순서에서 세 번째 매개 변수) 만 표시됩니다.

이것에 대한 아이디어가 있습니까?

+0

@labname 매개 변수를 유지 하시겠습니까? 배열 내용? 구분 된? – Gratzy

+0

예. 나는 (lab1, lab2, lab3, ..)에서 @labname을 쿼리하려고한다. labnamesparam 변수는 현재 체크 박스 목록에서 입력 값을 확인합니다. –

+0

코드가 조금 더 복잡해지면 SQL의 단순화 된 예제에서 기대하는 유형을 알 수 있고 C#의 함수 매개 변수도 알 수 있으므로 labnamesparam이 정의 된 방식을 볼 수 있습니다. – AnthonyWJones

답변

1

배열의 컨테스트를 문자열로 변환해야합니다. 다음은 C# 예제입니다. 단 한 가지 방법은 아닙니다.

 System.Text.StringBuilder k = new System.Text.StringBuilder(); 
     foreach (string x in LABNAMES) { 
      k.Append(x); 
      k.Append(","); 
     } 
     .Add(New SqlParameter("@labname", SqlDbType.Text)).Value =k.ToString(); 

동적 인 절을 사용할 수 없지만 SQL을 변경해야합니다. 오래된 트릭이지만 좋은 연습은 문자열 전체로 SQL을 설정하고 실행하십시오.

+0

VB에서이 코드를 다음과 같이 썼습니다 : Dim l As System.Text.StringBuilder l = 새 System.Text.StringBuilder Dim x As Integer x = 0 인 경우 크기 - 1 l.Append (" '") l.Append (labnamesparam (X)) l.Append ("'") 경우 X <크기 - 1이어서 l.Append (",") 종료하면 다음 –

0

문자열 배열을 전달하고 T-SQL "IN"연산을 수행하려면 저장 프로 시저에서 조금 더 많은 작업을해야 할 수도 있습니다.

This article은 아주 좋은 예입니다.

0

SQL Server 2008을 사용하는 경우 "테이블 반환 매개 변수"(TVP) 기능을 사용할 수 있습니다.

기본적으로, SQL Server 2008의, 당신은 사용자 정의 테이블 형식 정의해야

CREATE TYPE Customer AS 
    TABLE (id int, CustomerName nvarchar(50), postcode nvarchar(50)) 

을 한 후 사용하는 매개 변수로 저장 프로 시저의 :

CREATE Procedure AddCustomers(@customer Customer READONLY) 

그리고 C# 코드에서 동일한 구조의 DataTable 변수를 만들고이를 입력 매개 변수로 사용하십시오. 그렇게하면 원하는만큼 많은 값과 구조를 전달할 수 있습니다.

더 많은 정보와 다양한 코드 샘플이 우수한 블로그 게시물을 참조 :

마크 SQL 2008

2

를 A를 사용한다 TVP, Marc의 추천에 따라

SQL 2005에는 XML을 사용하거나 쉼표로 구분 된 목록을 사용하는 것과 같은 여러 가지 기술이 있습니다. 각 기술의 포괄적 인 분석은 안녕 페이지의 Erland Sommarskog에 의해 http://www.sommarskog.se/arrays-in-sql-2005.html에 보관됩니다.

SQL 2000의 경우 옵션이 더 적으며 Erland는 각각 Arrays and Lists in SQL Server (SQL 2000 and Earlier)에 대한 포괄적 인 토론을 제공합니다.

저는 Erland의 기사를 오래 전부터 참고로 사용 해왔다.