Название месяца поля даты в базе данных Access из внешнего приложения (C #) - PullRequest
2 голосов
/ 18 января 2011

Я хочу заполнить выпадающий список во время выполнения в C #.У меня есть поле даты / времени (например, 01.05.2000) в базе данных Access 2003.Я хочу, чтобы название месяца (то есть январь, февраль, ...) в раскрывающемся списке во время выполнения.

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

Приведенный выше запрос работает нормально, когда я запускаю его из Access напрямую, но когда я пытаюсь запустить его из OledbCommand объекта в C #, он говорит

Неопределенная функция 'MonthName' в выражении.

Ответы [ 2 ]

2 голосов
/ 18 января 2011

Текст из социальной сети MSDN поток :

Пользовательские функции VBA, написанные пользователем, а также многие встроенные функции языка VBA выполняются Microsoft Access при внедрении в SQLзапрос.К сожалению, функции, доступные для ядра базы данных Jet, ограничены (при выполнении через ADO, ADO.NET и т. Д.).Вы можете найти список доступных в следующей статье MS KB:

Как настроить Jet 4.0 для предотвращения запуска небезопасных функций в Access 2003.

РЕДАКТИРОВАТЬ: Используйте метод Format ().

SELECT DISTINCT  format(DATE_OF_BOOKING,'MMMM') 
   AS MNTH FROM TRAVEL_DETAILS WHERE YEAR(DATE_OF_BOOKING)='2008'
1 голос
/ 09 декабря 2017

MonthName - одна из многих функций доступа, которая не поддерживалась драйверами ODBC и OLEDB для исходного ядра базы данных "Jet", т. Е.

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
Распространяемый компонент Microsoft Access Database Engine 2010

...