我想在运行时在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'。
答案 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