条件表达式中的访问数据类型不匹配
本文关键字:数据类型 不匹配 访问 表达式 条件 | 更新日期: 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()
中,以强制参数为正确的数据类型。