来自外部应用程序的Access数据库中的日期字段的月份名称(C#)

时间:2011-01-18 05:31:25

标签: c# .net ms-access oledb

我想在运行时在C#中填充下拉列表。我在Access 2003数据库中有一个日期/时间字段(例如,01/05/2000)。我希望在运行时的下拉列表中有月份名称(即1月,2月,...)。

SELECT DISTINCT MonthName(Month(DATE_OF_BOOKING)) AS MNTH 
    FROM TRAVEL_DETAILS WHERE YEAR(DATE_OF_BOOKING)='2008' 

上面的查询正常,我直接从Access运行它, 但是当我试图从C#中的OledbCommand对象运行它时,它说

  

表达式中未定义的函数'MonthName'。

2 个答案:

答案 0 :(得分:2)

来自社交msdn thread的文字:

  

自定义用户编写的VBA函数为   以及许多内置的VBA语言   功能由Microsoft执行   嵌入SQL查询时访问。   不幸的是功能可用   到Jet数据库引擎是有限的   (当通过ADO,ADO.NET执行时,   等等。)。你可以找到这些列表   可在以下MS KB中获得   文章:

How to configure Jet 4.0 to prevent unsafe functions from running in Access 2003.

编辑:使用Format()方法。

SELECT DISTINCT  format(DATE_OF_BOOKING,'MMMM') 
   AS MNTH FROM TRAVEL_DETAILS WHERE YEAR(DATE_OF_BOOKING)='2008'

答案 1 :(得分:1)

MonthName是原始" Jet"的ODBC和OLEDB驱动程序不支持的众多Access函数之一。数据库引擎,即

Driver={Microsoft Access Driver (*.mdb)}用于ODBC或者 OLEDB的Provider=Microsoft.Jet.OLEDB.4.0

支持更新" ACE"的驱动程序。数据库引擎

Driver={Microsoft Access Driver (*.mdb, *.accdb)}用于ODBC或者 OLEDB的Provider=Microsoft.ACE.OLEDB.12.0

Microsoft Access Database Engine 2016 Redistributable
Microsoft Access Database Engine 2010 Redistributable