2013-08-20 70 views
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) 

任何帮助,将不胜感激。我很难过。

+0

你是如何在代码或者设计器中构建你的'TableAdapter'的? –

+1

第三个查询是否提供作为第二个参数的工作日? – muratgu

+0

表适配器是在设计器中构建的。是的,参数按正确的顺序提供。如果参数是乱序提供的,它会给出“int不能转换为日期时间”的预期错误,所以它肯定会知道每个参数的正确类型。 – JumboMaximus

回答

0

?参数占位符,在它们出现的顺序处理,因此在此查询将期望参数1是WorkDate和参数2是ProjectID

如果这仍然没有工作,尝试包裹?参数标记CDate()和/或(推测)CInt()强制参数为正确的数据类型。

相关问题