来自外部应用程序的 Access 数据库中日期字段的月份名称(C#)
Posted
技术标签:
【中文标题】来自外部应用程序的 Access 数据库中日期字段的月份名称(C#)【英文标题】:Month name of date field in Access database from external application (C#) 【发布时间】:2011-01-18 05:31:25 【问题描述】:我想在 C# 运行时填充一个下拉列表。我在 Access 2003 数据库中有一个日期/时间字段(例如 01/05/2000)。我想在运行时在下拉列表中显示月份名称(即一月、二月、...)。
SELECT DISTINCT MonthName(Month(DATE_OF_BOOKING)) AS MNTH
FROM TRAVEL_DETAILS WHERE YEAR(DATE_OF_BOOKING)='2008'
当我直接从 Access 运行时,上面的查询工作正常,
但是当我试图从 C# 中的 OledbCommand
对象运行它时,它会说
表达式中未定义函数“MonthName”。
【问题讨论】:
如果它在访问中工作,你为什么不做一个查询的存储过程......(只是一个想法) 出于性能原因,我建议您的 WHERE 子句应为WHERE DATE_OF_BOOKING BETWEEN #1/1/2008# AND #12/31/2008#
。我不知道您的 OLEDB 接口是否需要使用 Jet/ACE 日期分隔符,或者您是否可以使用单引号并将其转换。关键是使用 Year() 函数将无法在该字段上使用索引(假设有一个)。
【参考方案1】:
来自社交msdnthread的文字:
自定义用户编写的 VBA 函数作为 以及许多内置的 VBA 语言 功能由微软执行 嵌入在 SQL 查询中时的访问。 不幸的是可用的功能 Jet 数据库引擎是有限的 (当通过 ADO、ADO.NET 执行时, ETC。)。您可以找到这些列表 在以下 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'
【讨论】:
格式还允许您根据您使用的 Ms 数量选择数字、短月或全月名称。【参考方案2】:MonthName 是原始“Jet”数据库引擎的 ODBC 和 OLEDB 驱动程序不支持的众多 Access 功能之一,即
Driver=Microsoft Access Driver (*.mdb)
用于 ODBC,或Provider=Microsoft.Jet.OLEDB.4.0
用于 OLEDB
但它受到较新“ACE”数据库引擎的驱动程序的支持
Driver=Microsoft Access Driver (*.mdb, *.accdb)
用于 ODBC,或Provider=Microsoft.ACE.OLEDB.12.0
用于 OLEDB
Microsoft Access Database Engine 2016 RedistributableMicrosoft Access Database Engine 2010 Redistributable
【讨论】:
以上是关于来自外部应用程序的 Access 数据库中日期字段的月份名称(C#)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ReactJS 中循环来自外部文件的 JSON 数据?
从 AWS Glue 表到 RedShift Spectrum 外部表的日期字段转换