Вопрос:
Я создал очень маленький сайт ASP.NET, используя MS Access 2010 в качестве базы данных, которая работает в тестовом режиме. Это для автономного приложения для интрасети, поэтому я не беспокоюсь о безопасности – доступ к оборудованию – это путь взлома. Все это встроено в VS WebExpress 2012.
Когда я пытаюсь опубликовать в IIS 7.5, откройте страницу заставки веб-сайта, а затем перейдите на вторую страницу, мне дают два сообщения об ошибках верхнего уровня:
[Win32Exception (0x80004005): сетевой путь не найден]
[SqlException (0x80131904): При установлении соединения с SQL Server возникла связанная с сетью или конкретная ошибка экземпляра. Сервер не найден или не был доступен. Проверьте правильность имени экземпляра и настройте SQL Server для удаленного подключения. (поставщик: поставщик Named Pipes, ошибка: 40 – не удалось открыть соединение с SQL Server)]
Моя строка подключения:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=»C:inetpubwwwrootApp_DataPersonalArt Version 0055.accdb»;Persist Security Info=True
Я не знаю, почему это создает ошибку SQL Server, поскольку я не пытаюсь использовать SQL Server.
Я пробовал посмотреть на сторону SQL Server здесь. Я проверил, что SQL Server запущен, что браузер SQL включен и работает, и что соответствующие порты открыты в брандмауэре.
Я добавил строку подключения к IIS 7.5, которая, по крайней мере, указывает на ACE.OLEDB.12.0, но я не могу удалить строку подключения по умолчанию для SQL Server Express.
Я посмотрел здесь о построении строк подключения, и я видел инструкции по удалению строк плохих подключений и их замене здесь (но я боюсь этого, потому что я этого не понимаю).
Я намерен использовать контроллер планшета WIFI, и я установил, что IIS работает достаточно хорошо, чтобы я мог видеть индексную страницу на контроллере.
Итак, я подпрыгивал, пытаясь понять, является ли это проблемой IIS, проблемой установки/управления SQL или проблемой брандмауэра/безопасности.
Ответ №1
Для ошибки 0x80004005:
Идея # 1: попробуйте удалить двойные кавычки по списку каталогов и перепроверить свой код (я упоминаю об этом, хотя вы, возможно, уже пробовали):
«C:inetpubwwwrootApp_DataPersonalArt Version 0055.accdb»
Идея № 2: ошибка говорит Сетевой путь не найден. Попробуйте создать локальный ресурс и предоставить учетной записи IIS, по крайней мере, разрешения на чтение для этого общего ресурса, изменив список каталогов на что-то вроде
\MyServerMySharePersonalArt Version 0055.accdb
Идея: # 3: Являясь администратором баз данных, я занимаюсь SQL Server, поэтому лично лично попробую проверить строку подключения, чтобы убедиться, что она возвращает данные – с помощью SQL Server. Если он здесь не работает, я бы не ожидал, что он будет работать с ASP.NET:
Попробуйте запустить это в SQL Server, чтобы узнать, даже ли вы получаете запрос назад к имени таблицы в Access (если у вас нет лучшего способа проверить строку подключения):
SELECT * FROM OPENROWSET(‘Microsoft.ACE.OLEDB.12.0’, Provider=Microsoft.ACE.OLEDB.12.0;Data Source=»C:inetpubwwwrootApp_DataPersonalArt Version 0055.accdb»;Persist Security Info=True, ‘SELECT * FROM <your table>’)
Но прежде чем вы это сделаете, вам может потребоваться запустить на SQL Server следующее: он распознает ACE.OLEDB.12.0 и распределенные запросы:
exec sp_configure ‘Show Advanced Options’, 1; RECONFIGURE; GO exec sp_configure ‘Ad Hoc Distributed Queries’, 1; RECONFIGURE; GO EXEC master.dbo.sp_MSset_oledb_prop N’Microsoft.ACE.OLEDB.12.0′, N’AllowInProcess’, 1 GO EXEC master.dbo.sp_MSset_oledb_prop N’Microsoft.ACE.OLEDB.12.0′, N’DynamicParameters’, 1 GO
Для SqlException (0x80131904):
Ошибка SQL звучит как другая проблема. Попробуйте включить SQL для удаленного подключения в поле production SQL (или везде, где происходит подключение) в диспетчере конфигурации SQL Server: