Внутренняя ошибка OLE-автоматизации в MS Access с использованием OleDb - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь получить доступ к базе данных 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-автоматизации», если только я не запрашиваю только поля типа «Текст» (или, что еще хуже, я вырываю весь пул приложений).

Пожалуйста, помогите, у меня заканчиваются идеи, которые могли бы объяснить это странное поведение.

1 Ответ

0 голосов
/ 26 февраля 2019

На всякий случай, если кто-то находится в такой же ситуации.

Хотя это нигде не указано как нечто необходимое (или даже связанное), установка Microsoft Access 2016 Runtime, обнаруженная в https://www.microsoft.com/en-us/download/confirmation.aspx?id=50040, решилапроблема (и увеличила скорость доступа к базе данных тоже).

Я все еще ломаю голову, почему.

...