探している日付範囲内の行を取得するために、データテーブルでselectステートメントを作成しようとしています。私はこれに不慣れですが、このselectステートメントがどのように機能するのかよくわかりません。これを書こうとしましたが、動作しません。ここで手を貸していただけませんか。ハマった
foundRows = dt.Select("DATE1 <= '" + date1+ "' AND DATE2 >= '" + date1+ '"');
これは、私がテストした最適な検索基準です。あなたはデートしなければなりません。
開始日 = 2012 年 12 月 1 日 終了日 = 2012 年 12 月 31 日
適用するDataTableの列。(私のコードでは「日付」)
Select ステートメントは次のようになります。
DataRow[] rows = newTable.Select("date >= #" + from_date + "# AND date <= #" + to_date + "#");
日付を#でラップする以外に、date1が文字列ではなくDateTimeである場合は、ToString(日付形式)を使用して正しいSQLステートメントを取得する必要があります。デバッグの場合、最初にフィルターを含む文字列を作成し、次にその文字列を使用して選択を行うと簡単になります。次に、文字列を確認し、クエリビルダーでそれを使用してSQLを検証できます。
これを SSIS スクリプト コンポーネント内で使用します。日付の前後に「#」を含む上記の例を使用しました。また、それぞれを文字列に変換しました。これは完璧に機能しました。
SSIS 内でこれをセットアップする方法を知りたい場合に備えて: 最初に、レコードセットを格納するオブジェクト変数を含むレコードセットの宛先を使用するデータ フローがありました。
私のスクリプトでは、変数を読み取り専用として含めました。
メインクラスでは...
public class ScriptMain : UserComponent
{
OleDbDataAdapter a = new OleDbDataAdapter();
System.Data.DataTable AwardedVacTable = new System.Data.DataTable();
...
...
次に、事前実行で...
public override void PreExecute()
{
base.PreExecute();
a.Fill(AwardedVacTable, Variables.rsAwardedVac);
...
...
次に、カスタムメソッドでデータテーブルにアクセスしました...
String dtFilter = "EmployeeID = " + empId.ToString() + " AND (#" + Convert.ToString(StartDate) "# <= EndDate AND #" + Convert.ToString(StartDate) + "# >= StartDate" + " OR #" + Convert.ToString(StartDate.AddDays((double)numDays)) + "# >= StartDate AND #" + Convert.ToString(StartDate.AddDays((double)numDays)) + "# <= EndDate)";
DataRow[] Overlaps = AwardedVacTable.Select(dtFilter);