2

これをwhere句に追加すると:

DueDate <= getDate() AND DueDate IS NOT null

「子を作成できませんでした: System.Reflection.TargetInvocationException: 呼び出しのターゲットによって例外がスローされました。」という小さな失敗が表示されます。---> System.Data.EvaluateException: 式に未定義の関数呼び出し getDate() が含まれています。

私が間違っていることは何か分かりますか?


使用中の更新 コード:

private string getFilter(int mode) {
    String filter = "";
    if ((ALL_WORK_ORDERS & mode) == 0) {
        if ((mode & OUTSTANDING_WORK_ORDERS) == OUTSTANDING_WORK_ORDERS) {
            filter += "DueDate <= getDate() AND DueDate IS NOT null OR";
        }
        if ((mode & COMPLETED_WORK_ORDERS) == COMPLETED_WORK_ORDERS) {
            filter += " FinishedDate IS NOT  null";
        }
    }

    filter = filter.Trim();
    if (filter.EndsWith("OR")) {
        filter = filter.Remove(filter.Length - 2);
    }

    return filter;
}

そして、ここで使用されています:

tblWorkOrderBindingSource.Filter = getFilter(mode);

表では、DueDate は datetime 型です。

追記: 走れます

SELECT [ID]
      ,[WorkDesc]
      ,[DueDate]
  FROM [RentalEase].[dbo].[tblWorkOrder]
WHERE [DueDate] <= getDate() AND [DueDate] IS NOT null

問題なく MS SQL Server Management Studio Express で。


最終的解決

    private string getFilter(int mode) {
        String filter = "";
        if ((ALL_WORK_ORDERS & mode) == 0) {
            if ((mode & OUTSTANDING_WORK_ORDERS) == OUTSTANDING_WORK_ORDERS) {
                filter += "DueDate <= #" + DateTime.Now.ToShortDateString() + "# AND DueDate IS NOT null  AND FinishedDate IS null OR";
            }
            if ((mode & COMPLETED_WORK_ORDERS) == COMPLETED_WORK_ORDERS) {
                filter += " FinishedDate IS NOT null";
            }
        }

        filter = filter.Trim();
        if (filter.EndsWith("OR")) {
            filter = filter.Remove(filter.Length - 2);
        }

        return filter;
    }
4

5 に答える 5

4

ここで何が間違っているかについての例外はかなり明確です。フィルター式で使用できないメソッド getdate を指定しています。有効なものとそうでないものについては、DataColumn クラスの Expression プロパティに関するドキュメントを参照してください。

http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

そうは言っても、getdate の代わりに、日付をフィルターに連結する必要があります (現在の日付を取得するには、DateTime 構造体の静的な Now プロパティを呼び出します)。上記のリンクは、日付を適切にフォーマットする方法を示しています(ケリーの回答に示されているように行うことはできませんが、その回答はほとんどの方法です)。

于 2009-02-11T21:40:10.873 に答える
2

やってみました

filter += "DueDate <= #" + DateTime.Now + "# AND DueDate is not Null"
于 2009-02-11T21:36:44.267 に答える
0

それはT-SQLであるはずですか?これを試して

DueDate <= getDate() 
AND  DueDate IS NOT null
于 2009-02-11T21:12:58.367 に答える
0

これが sql であると想定される場合は、"||" 「OR」の記号ではなく、「&&」はANDの記号ではありません。

filter += "DueDate <= GetDate() AND DueDate is not NULL OR ";
于 2009-02-11T21:18:00.367 に答える