我正在使用Access数据库,并尝试加载DataTable对象,但收到错误消息。我的查询在标准访问模块内调用一个名为“ CountWeekDays”的公共函数,当通过Access本身运行时,会返回正确的结果。通过.NET应用程序调用时,为什么这不起作用?
SELECT tbl1.ProjectID, tbl1.EntryDate AS StartDate, tbl2.EntryDate AS EndDate, (SELECT (ChecklistDayMax - ChecklistDayMin + 1) AS DaysAlotted FROM milestone_def WHERE MilestoneDefID = [@milestoneID]) AS DaysAlotted, (SELECT ProjectPriority FROM project_master WHERE ProjectID = tbl1.ProjectID) AS Priority, IIF(Priority = 1, (SELECT BonusDaysFH FROM milestone_def WHERE MilestoneDefID = [@milestoneID]), IIF(Priority = 2, (SELECT BonusDaysFM FROM milestone_def WHERE MilestoneDefID = [@milestoneID]), IIF(Priority = 3, (SELECT BonusDaysFL FROM milestone_def WHERE MilestoneDefID = [@milestoneID])))) AS BonusDaysAllotted, CountWeekDays(tbl1.EntryDate, tbl2.EntryDate) AS DaysRequired FROM checklist_entries AS tbl1 INNER JOIN checklist_entries AS tbl2 ON tbl1.ProjectID = tbl2.ProjectID WHERE tbl1.ChecklistDay = (SELECT ChecklistDayMin FROM milestone_def WHERE MilestoneDefID = [@milestoneID]) AND tbl2.ChecklistDay = (SELECT ChecklistDayMax FROM milestone_def WHERE MileStoneDefID = [@milestoneID]);
只有在Access本身中运行查询时,才可以在Access查询中使用用户定义的VBA函数。如果要从.NET应用程序中运行查询,则查询将仅返回开始/结束日期,并且您的.NET代码将必须计算它们之间的工作日数。