条件表达式中的访问数据类型不匹配

本文关键字:数据类型 不匹配 访问 表达式 条件 | 更新日期: 2023-09-27 18:28:20

我在从Access中提取的C#表适配器中看到了一些奇怪的行为。我有一个查询,它在Access中返回结果,在TableAdapter query Builder执行查询窗口中返回结果。但在代码中失败,并且在使用"预览数据"对话框时失败。

问题似乎出现在DateTime参数中。奇怪的是,它只有在放入嵌套的select语句中时才会失败。它在应用于整个查询时运行良好。不幸的是,我在嵌套部分需要它,但我总是得到"条件表达式中的数据类型不匹配"。如果删除另一个参数,并将数据参数保留在嵌套查询中,则查询也可以工作。

作品:

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=?

编辑

我已经能够通过嵌套查询的employee部分来获得所需的输出,因此没有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)

如有任何帮助,我们将不胜感激。我被难住了。

条件表达式中的访问数据类型不匹配

?参数占位符按其出现的顺序进行处理,因此此查询将期望参数1为WorkDate,参数2为ProjectID

如果仍然不起作用,请尝试将?参数标记包装在CDate()和/或(可能)CInt()中,以强制参数为正确的数据类型。