私は、データセットをクエリするために使用しているデザイナ生成コードをいくつか持っています。デザイナーは、独自のBindingSouceとTableAdapterを作成したReportViewerを持つFormを持っているため、このデザイナーがそれを生成しました。私はTableAdapterスマートタグで "Add Query ..."関数を使用しました。パラメータ数が可変のparamatarizedクエリの生成
クエリは単純な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
プロパティを参照すると、デザイナで生成されたコードが1に設定されているのとは異なり、0に設定されます。
私のデータベースはOleDbです。
私は何をしようとしていますか?
すごい目!それはそれだった。愚かな私。 – Brad