【问题标题】:Access Data Type Mismatch in Criteria Expression条件表达式中的访问数据类型不匹配
【发布时间】:2013-08-20 22:36:16
【问题描述】:

我在从 Access 中提取的 C# TableAdapter 中看到了一些奇怪的行为。我有一个查询在 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=?

编辑

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

任何帮助将不胜感激。我被难住了。

【问题讨论】:

  • 你是如何构建你的TableAdapters的,是用代码还是设计器?
  • 对于第三个查询,您是否提供工作日期作为第二个参数?
  • 表适配器是在设计器中构建的。是的,参数以正确的顺序提供。如果参数乱序提供,它会给出“int can't be convert to datetime”的预期错误,所以它似乎肯定知道每个参数的正确类型。

标签: c# visual-studio-2010 ms-access


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2017-01-14
    • 1970-01-01
    • 2016-01-18
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多