Я пытаюсь получить доступ к базе данных MS Access из приложения ASP MVC, используя OleDb.Поставщик, который я использую в строке подключения: Microsoft.ACE.OLEDB.12.0.
Когда я запускаю приложение из Visual Studio, все работает нормально (Access установлен на моем компьютере).Я опубликовал WebApp на Windows Server 2012 (IIS 8), установил 64-разрядную версию Access Database Engine на машину, и все тоже работает, как и ожидалось.
Но теперь мне нужно установить приложение на Windows Server2008 (IIS 7.5).И я получаю самое странное поведение на этой машине в зависимости от того, что я включаю в предложение WHERE моего запроса.
Если я выполняю запрос к любому полю, имеющему тип Text, проблем не возникает.Например, это нормально:
SELECT * FROM MYTABLE WHERE TEXTFIELD = "SOMETHING"
Но если я сделаю запрос, скажем, к числовому полю:
SELECT * FROM MYTABLE WHERE NUMBERFIELD = 666
Я всегда получаю
System.Data.OleDb.OleDbException (0x80040E14): Internal OLE Automation error
Я даже не могу запросить
SELECT * FROM MYTABLE WHERE 666 = 666
Странно то, что если я пытаюсь обновить (или вставить) таблицу, у меня нет проблем с обновлением любого типа поля (текст, числа, даты),КАК ДОЛГО, КАК предложение WHERE оператора UPDATE не включает никаких полей, кроме типа Text.
Я пробовал также
SELECT * FROM MYTABLE WHERE Str(NUMBERFIELD) = "666"
, а затем весь пул приложений падает, запускается автоматическиснова и вылетает!(В журнале событий говорится: «Пул приложения, обслуживающего процесс« MyAppPool », столкнулся с фатальной ошибкой связи со службой активации процессов Windows. Идентификатор процесса был« 12220 ». Поле данных содержит номер ошибки.», С идентификатором события 5011).
Если я создаю запрос доступа с чем-то вроде «SELECT Str (2) AS StrField FROM SOMETABLE» и называю его MYACCESSQUERY, а затем я запрашиваю из своего приложения этот запрос доступа с помощью простого «SELECT»* FROM MYACCESSQUERY "AppPool тоже аварийно завершает работу!.
После многих поисков в ряде мест ошибка Internal OLE Automation связана с использованием параметров, но моя, похоже, не так:В конце концов, это самая левая часть выражения, которая доставляет мне неприятности (часть поля в NUMBERFIELD = 666), а не крайняя правая часть (значение 666, которое я проверяю, обычно это часть, которая передается с использованием параметра).
Я пытался построить запросы с параметрами или без параметров, но безрезультатно.Мы сравнили пулы приложений на разных машинах, и они выглядят одинаково, установленный компонент Access Database Engine тоже одинаков.
Все, что я пытаюсь, работает безупречно на моей разрабатываемой машине и на моем тестовом сервере, нокогда я пытаюсь запустить его на клиентском сервере, ничего, я всегда получаю «Внутреннюю ошибку OLE-автоматизации», если только я не запрашиваю только поля типа «Текст» (или, что еще хуже, я вырываю весь пул приложений).
Пожалуйста, помогите, у меня заканчиваются идеи, которые могли бы объяснить это странное поведение.