0

Access からプルしている C# TableAdapter で奇妙な動作が見られます。Access で結果を返し、TableAdapter クエリ ビルダーの [クエリの実行] ウィンドウで結果を返すクエリがありますが、コードで失敗し、[データのプレビュー] ダイアログを使用すると失敗します。

問題は DateTime パラメータにあるようです。奇妙なのは、ネストされた select ステートメント内に配置された場合にのみ失敗することです。クエリ全体に適用すると正常に機能します。残念ながら、ネストされた部分で必要ですが、常に「基準式のデータ型の不一致」が発生します。他のパラメーターを削除し、入れ子になったクエリに data パラメーターを残した場合も、クエリは機能します。

作品:

SELECT        Employee.FirstName, TimeCard.ID
FROM            (((Employee INNER JOIN
                     MasterFilmUnit ON Employee.ID = MasterFilmUnit.ID) INNER JOIN
                     MasterDepartment ON Employee.ID = MasterDepartment.ID) LEFT OUTER JOIN
                         (SELECT        ID, WorkDate, EmployeeID
                           FROM            DailyTimeCard
                           WHERE (WorkDate = ?)) TimeCard ON TimeCard.EmployeeID = Employee.ID)

作品:

SELECT        Employee.FirstName, TimeCard.ID
FROM            (((Employee INNER JOIN
                     MasterFilmUnit ON Employee.ID = MasterFilmUnit.ID) INNER JOIN
                     MasterDepartment ON Employee.ID = MasterDepartment.ID) LEFT OUTER JOIN
                         (SELECT        ID, WorkDate, EmployeeID
                           FROM            DailyTimeCard
                           ) TimeCard ON TimeCard.EmployeeID = Employee.ID)
WHERE Employee.ProjectID=? AND WorkDate = ?

動作しません:

SELECT        Employee.FirstName, TimeCard.ID
FROM            (((Employee INNER JOIN
                     MasterFilmUnit ON Employee.ID = MasterFilmUnit.ID) INNER JOIN
                     MasterDepartment ON Employee.ID = MasterDepartment.ID) LEFT OUTER JOIN
                         (SELECT        ID, WorkDate, EmployeeID
                           FROM            DailyTimeCard
                          WHERE WorkDate = ? ) TimeCard ON TimeCard.EmployeeID = Employee.ID)
WHERE Employee.ProjectID=?

編集

クエリの従業員部分をネストすることで、目的の出力を取得できたため、クエリ全体に where ステートメントを適用する必要がありません。私は今稼働していますが、それでも、オリジナルが機能しない理由がわかりません。

作品:

SELECT        Employee.FirstName, TimeCard.ID
FROM            ((((SELECT Employee.*
                          FROM            Employee Employee_1
                          WHERE        (ProjectID = ?)) Employee Left OUTER JOIN
                     MasterFilmUnit ON Employee.ID = MasterFilmUnit.ID) LEFT OUTER JOIN
                     MasterDepartment ON Employee.ID = MasterDepartment.ID) LEFT OUTER JOIN
                         (SELECT        DailyTimeCard.*
                           FROM            DailyTimeCard
                           WHERE        (WorkDate = ?)) TimeCard ON TimeCard.EmployeeID = Employee.ID)

どんな助けでも大歓迎です。私は困惑しています。

4

1 に答える 1