Проблема с доступом к базе данных в Windows 7 MS Visual Studio - PullRequest
0 голосов
/ 01 мая 2011

Я разработал небольшое приложение, которое обращается к базе данных MS Access на моем компьютере с помощью VB.net. Я разработал программу на Windows XP 32 бит. На данный момент я использую 64-битную Windows 7, и программа просто не будет работать. Я получаю исключение нулевой ссылки, когда пытаюсь что-либо сделать с базой данных. Я сузил это, я думаю, провайдеру БД. Я использовал Provider=Microsoft.Jet.OLEDB.4.0; и попытался использовать Provider=Microsoft.ACE.OLEDB.12.0;. Ни то, ни другое не работает. Путь к моей базе данных на 100% правильный. Это ошибка, которую я получаю:

Исключение нулевой ссылки не обработано. Ссылка на объект не установлена ​​для экземпляра объекта.

Как я уже сказал, программа отлично работает на компьютере с Windows XP. Если это помогает, расширение файла базы данных доступа - mdb.

Ответы [ 3 ]

1 голос
/ 01 мая 2011

DLL не существует для 64-битного доступа к файлам базы данных Access, поэтому вы должны перейти к свойствам проекта, а на вкладке «Компиляция» перейти к «Расширенные параметры компиляции» и установить «Target CPU» на «x86»..

1 голос
/ 01 мая 2011

У меня была точно такая же проблема, кроме записи в БД SQL 2008. VS2008, код VB.net с фреймворком 3.5, Windows 7 64-битная. Код работает нормально на XP.

Ответ Джона Р. дал правильное решение: изменив расширенные параметры компиляции проекта, установив для «Target CPU» значение «x86».

Эта проблема может иметь больше симптомов, чем первоначально описано. Я обобщу их:

Доступ к ACCESS - не единственная проблема; это происходит и с SQL (по крайней мере, с MS SQL 2008).

Некоторые из вызовов БД могут и работают. Это как если бы вызовы настраивали вас на неудачу, но точка сбоя происходит позже, в произвольной точке вашей программы.

Точка сбоя, которую я увидел, была во время вызова подпрограммы. (просто обычный вызов подпрограммы, которую я создал в VB.) Если поместить блок try-catch вокруг вызова, это не отразит ошибку.

Вот самая странная часть: перед ошибочным вызовом подпрограммы код имел исключение HANDLED. По иронии судьбы, исключением было ТОЧНО то, что бросали при ошибочном вызове. Когда я «подправил» код, чтобы избежать предыдущего исключения, при ошибочном вызове не было создано никакого исключения; Программа VB ПРОСТО ВЫЙТИ БЕЗ ОШИБКИ Похоже, что какой-либо код имеет проблему, он повторно использует последнее обработанное исключение. Это будет означать, что если ваш код ранее имел ошибку «индекс за пределами» или «деление на 0», это то, что вы (вероятно) увидели бы, когда код запирает (из-за отсутствия 64-битной библиотеки DLL). проблема может маскироваться под кучу ошибок!

0 голосов
/ 01 мая 2011

Не похоже на ошибку провайдера, потому что часть Jet в порядке. Убедитесь, что путь к источнику данных указан правильно. Если он находится в папке «Проекты» на VS и вы используете полный путь, возможно, его придется изменить из-за того, как файловая система настроена с помощью «Пользователи» против «Документы и настройки».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...