데이터 집합을 쿼리하는 데 사용하는 일부 디자이너 생성 코드가 있습니다. 디자이너는 자신의 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입니다.
내가 할 수있는 일이 가능합니까?
와우! 그거였다. 바보 나. – Brad