классический asp подключается к базе данных доступа, файл не найден

Мне приходится работать в классическом ASP для небольшой работы. Я пытаюсь запустить сайт на своем компьютере для тестирования. Я использую Windows 7 и IIS 7.

Я получаю сообщение об ошибке при запуске с локального хоста и при проверке журналов получаю сообщение об ошибке: 80004005 | Не удалось_найти_файл_'c:\inetpub\wwwroot\sc\website\data\si.mdb'

Мой код такой

dim objConn
dim objRS
set objConn = Server.CreateObject("ADODB.Connection")

objConn.Provider="Microsoft.Jet.OLEDB.4.0"
Set objRS = Server.CreateObject("ADODB.Recordset")

objConn.Open("c:/inetpub/wwwroot/sc/website/data/si.mdb")

Однако это точный путь к файлу. Кто-нибудь знает, как я могу получить к этому доступ? Является ли код неправильным или есть настройки IIS, которые мне нужно установить?

У меня не установлена ​​какая-либо версия Office, может ли это вызвать проблему?

Я пробовал много разных путей и настроек провайдера, но ни один из них не работал.

Редактировать В коде, над которым я работаю, на самом деле не было никаких сведений о строке подключения, но человек сказал, что он все еще работает на его компьютере, поскольку друг настроил тестовую среду.

Он не помнит, как его друг устанавливал, но сказал: «Я помню, наблюдая за ним, что он подключился к базе данных через источники данных (ODBC), потому что, как вы сказали, в коде нет прямого пути, поскольку он использует «глобальное что-то» ( не знаю подходящего термина)».


person ddd    schedule 23.07.2009    source источник
comment
см. мое недавнее редактирование о названном dsn.   -  person Michael Pryor    schedule 23.07.2009


Ответы (6)


Вы можете попробовать использовать монитор процессов, чтобы увидеть, какой именно файл не обнаружен или вызван проблемой с разрешениями.

Кроме того, хотя использование прямой косой черты вместо обратной косой черты обычно не является проблемой, вы можете попробовать изменить это, если это имеет какое-либо значение.

Если вы используете 64-разрядную версию Windows, JET не поддерживается в этом режиме, хотя вы можете обойти это с помощью настройка IIS для запуска приложений x32. Для этого выполните в командной строке следующее:

cscript.exe adsutil.vbs set W3SVC/AppPools/Enable32BitAppOnWin64 "true"
iisreset

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

Похоже, код ранее был настроен на использование глобального DSN, отсюда и отсутствие пути в строке подключения, хотя должны были быть какие-то детали подключения (например, имя DSN).

person Mun    schedule 23.07.2009
comment
Я использовал монитор процессов, и он показывает, что файл не существует. Хотя это явно так. Я использую 32-битную версию. Я не могу поверить, что все еще пытаюсь решить это спустя 2-3 часа, какая пустая трата дня! Как мне настроить это без подробностей строки подключения? У него изначально был con.Open si.mdb - person ddd; 24.07.2009
comment
Я знаю, что вы проверили ... но я думаю, что это проблема с разрешениями, как здесь подразумевается. Сет - person Seth Spearman; 24.07.2009
comment
Я склонен согласиться с Сетом, это все еще звучит как проблема с разрешениями. Вы пробовали переименовать файл и переместить его в другое место? Я бы рекомендовал положить его в корень, например. c:\db.mdb и пытается подключиться к нему (оставляя монитор процесса открытым, чтобы следить за происходящим). - person Mun; 24.07.2009
comment
Я собираюсь принять этот ответ, так как он показывает множество шагов, которые вы можете предпринять, чтобы исправить это. Я не могу удалить вопрос :( Мне стыдно признаться.....это была орфографическая ошибка!!! - person ddd; 24.07.2009

Это может быть проблема с разрешениями.

Простой способ проверить — предоставить всем полный доступ к каталогу, в котором находится файл.

person Bela    schedule 23.07.2009
comment
Я все еще получаю ту же самую ошибку даже после установки полных разрешений для всех :( - person ddd; 23.07.2009

Возможно, вы могли бы использовать функцию Server.MapPath, как показано здесь http://www.aspwebpro.com/tutorials/asp/dbconnectionopen.asp

person John Boker    schedule 23.07.2009

Ваша строка подключения выглядит неправильно для меня.

Посмотрите, поможет ли это.

РЕДАКТИРОВАТЬ: У вас установлен провайдер JET oledb?

EDIT2: проверьте наличие поставщика oledb с помощью этого вопроса.
Как проверить, установлен ли в системе драйвер OLEDB?

person shahkalpeshp    schedule 23.07.2009
comment
Я пробовал это, но получаю ту же ошибку. Хотя, когда я попробовал настройку рабочей группы, я получил другую ошибку, говорящую | Could_not_find_installable_ISAM. Но я не думаю, что это те настройки, которые мне нужны. - person ddd; 23.07.2009
comment
Как бы я проверил? У меня не установлен Office, поэтому не уверен, что проблема в нем. У меня VS2008 Pro, так что, может быть, он поставляется с драйвером? - person ddd; 23.07.2009
comment
Посмотрите, не установлен ли этот stackoverflow.com/questions/113860/ помогает. - person shahkalpeshp; 23.07.2009
comment
Итак, я выполнил поиск JET и нашел DLL на своем компьютере, не могу вспомнить точное имя файла. Так что я уверен, что это не проблема - person ddd; 23.07.2009

Я ответил на потенциально связанный вопрос на днях. Вы используете 64-битную Windows 7? Если это так, то поддержка Jet для x64-систем абсолютно НЕТ. В реальном приложении .NET вы можете просто перекомпилировать приложение с x86 в качестве цели. Но в вашем случае я не уверен в решении.

Сет

person Seth Spearman    schedule 23.07.2009
comment
У меня 32-битная, так что, наверное, это не так - person ddd; 23.07.2009

Почему ваша строка говорит: "c:/inetpub/wwwroot/sc/website/data/si.mdb"

вместо обычного пути Windows "c:\inetpub\wwwroot\sc\website\data\si.mdb"

Кроме того, вы можете перейти в Панель управления-> Административные инструменты-> Источник данных (ODBC) и создать новый именованный DSN на вкладке «Система». Например, назовите его si и убедитесь, что тип доступа, укажите правильный путь к базе данных доступа, и тогда ваш код будет просто:

dim objConn
set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open("si")
person Michael Pryor    schedule 23.07.2009
comment
я пробовал оба способа, косую черту и обратную косую черту, и это, возможно, только последний, который я пробовал. - person ddd; 23.07.2009