2011-10-18 5 views
1

데이터 집합을 쿼리하는 데 사용하는 일부 디자이너 생성 코드가 있습니다. 디자이너는 자신의 BindingSouce 및 TableAdapter를 작성한 ReportViewer가있는 Form을 가지고 있기 때문에이를 생성했습니다. TableAdapter 스마트 태그에서 "쿼리 추가 ..."기능을 사용했습니다.가변 개수의 매개 변수를 사용하여 paramatalized 쿼리 생성

쿼리는 간단한 SELECT 명령입니다. 그것은 작동하지만 나는 때때로 한 번에 여러 레코드를 쿼리하고 싶습니다 (나는 바코드 목록을 기반으로 보고서를 생성하고 있으며 거의 ​​항상 많을 것입니다). 디자이너는 나에게이 코드 주었다

public virtual int FillBySampleID(dbReceivedSamplersDataSetAccess.tblReceivedSamplersDataTable dataTable, string Param1) { 
     //FYI the select command it used is "SELECT * FROM tblReceivedSamplers WHERE SampleID IN (?)" 
     this.Adapter.SelectCommand = this.CommandCollection[2]; 
     if ((Param1 == null)) { 
      throw new global::System.ArgumentNullException("Param1"); 
     } 
     else { 
      this.Adapter.SelectCommand.Parameters[0].Value = ((string)(Param1)); 
     } 
     if ((this.ClearBeforeFill == true)) { 
      dataTable.Clear(); 
     } 
     int returnValue = this.Adapter.Fill(dataTable); 
     return returnValue; 
    } 

을 그리고 그것은 작동하고 그래서 나는이 방법을 과부하가 나를 한 번 WHERE를 사용에서 매개 변수의 수를 통과 할 수 있도록이 코드를 생성 한 레코드에 대한 좋은 ... IN SQL 문.

public virtual int FillBySampleID(dbReceivedSamplersDataSetAccess.tblReceivedSamplersDataTable dataTable, string[] Params) 
    { 
     //this.Adapter.SelectCommand = this.CommandCollection[2]; 
     if ((Params == null)) 
     { 
      throw new global::System.ArgumentNullException("Param1"); 
     } 
     else 
     { 
      int numParams = Params.Length; 


      List<string> lstParamQuesMarks = Enumerable.Repeat("'?'", numParams).ToList(); 
      string strParamQuesMarks = String.Join(",", lstParamQuesMarks); 
      this.Adapter.SelectCommand.CommandText = "SELECT * FROM tblReceivedSamplers WHERE SampleID IN (" + strParamQuesMarks + ")"; 

      this.Adapter.SelectCommand.Parameters.Clear(); 
      for (int i = 0; i < numParams; i++) 
      { 
       this.Adapter.SelectCommand.Parameters.AddWithValue("Param"+i, Params[i]); 
      } 

     } 
     if ((this.ClearBeforeFill == true)) 
     { 
      dataTable.Clear(); 
     } 
     int returnValue = this.Adapter.Fill(dataTable); 
     return returnValue; 
    } 

저는 영리하다고 생각했지만 작동하지 않는 것 같습니다. 그것은 오류 또는 아무것도주지 않습니다. 그것은 SelectCommand 텍스트를 SELECT * FROM tblReceivedSamplers WHERE SampleID IN ('?','?','?','?') 생성했습니다. 4 개의 매개 변수를 전달하면 모든 매개 변수 값이 좋게 보입니다. 디버깅 중에 dataTable을보고 count 속성을 탐색하면 0으로 설정됩니다 (디자이너가 생성 한 코드와 달리 1로 설정 됨).

내 데이터베이스는 OleDb입니다.

내가 할 수있는 일이 가능합니까?

답변

2

매개 변수를 따옴표로 묶지 마십시오. '?'이 아니라 ?을 사용하십시오.

+0

와우! 그거였다. 바보 나. – Brad

관련 문제