0
我在从Access中获取的C#TableAdapter中看到一些奇怪的行为。我有一个返回结果的查询,在TableAdapter查询生成器执行查询窗口中返回结果,但在代码中失败,并且在使用预览数据对话框时失败。在标准表达式中访问数据类型不匹配
该问题似乎在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=?
编辑
我已经能够得到ŧ他希望通过嵌套查询的员工部分来获得输出结果,因此没有将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)
任何帮助,将不胜感激。我很难过。
你是如何在代码或者设计器中构建你的'TableAdapter'的? –
第三个查询是否提供作为第二个参数的工作日? – muratgu
表适配器是在设计器中构建的。是的,参数按正确的顺序提供。如果参数是乱序提供的,它会给出“int不能转换为日期时间”的预期错误,所以它肯定会知道每个参数的正确类型。 – JumboMaximus