Я создал приложение D2010, которое использует компонент TADOConnection для подключения к SQL Server с использованием драйверов OLEDB и tcp / ip. Проблема заключается в том, что мое приложение не может подключиться к базе данных, когда я запускаю ее (внутри IDE или нет) с сетевого диска. Каждый раз, когда я пытаюсь, я получаю эту ошибку через IDE:
---------------------------
Debugger Exception Notification
---------------------------
Project TroisTiers.exe raised exception class EOleException with message '[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied.'
---------------------------
Break Continue Help
---------------------------
и я получаю «EOleException: Unspecified error» при запуске приложения вне IDE.
Дело в том, что когда я копирую .exe на локальный диск (C :), он работает мгновенно, без ошибок, без лагов. Когда я компилирую приложение D2010 на компьютере WinXP и запускаю его из Win7, оно также работает безупречно. Когда я беру .exe, который я собрал и запускаю на x86 Windows 7, я получаю те же ошибки, что и выше.
Я заметил, что при запуске приложения на сетевом диске загружаются следующие модули:
Module Load: WSHTCPIP.dll. No Debug Info. Base Address: $74CD0000. Process TroisTiers.exe (848)
Module Load: WSHIP6.dll. No Debug Info. Base Address: $74010000. Process TroisTiers.exe (848)
Module Load: DBnmpntw.dll. No Debug Info. Base Address: $750C0000. Process TroisTiers.exe (848)
Я утверждал, что приложение сначала пытается подключиться с использованием TCP / IP, а затем по какой-либо причине прибегает к именованным каналам. Просто для тестирования я активировал протокол именованных каналов на сервере, и он начал работать, но не каждый раз, и до установления соединения уходит до 10 секунд. Я деактивировал его, поскольку мы не подключаемся к производственным базам данных. Когда приложение выполняется локально (и показывает данные правильно), модуль DBnmpntw.dll загружается.
Когда я строю строку подключения (через файл .udl) и проверяю соединение, оно работает, хотя я не уверен, тестирую ли я через 64-битные или 32-битные драйверы.
Установка выходного каталога .exe на мой локальный диск пока является приемлемым решением, но мне бы очень хотелось знать, что является причиной этой проблемы, поскольку она усложняет работу в современной среде (дополнительная файлы рядом с .exe).
Дополнительная информация, для чего она стоит:
Моя строка подключения: 'Provider = SQLOLEDB.1; Persist Security Info = True; ID пользователя = *; Пароль = hunter2; Начальный каталог = [имя базы данных]; Источник данных = [IP-адрес сервера ]».
Я пытался принудительно использовать TCP / IP с "Network Library = DBMSSOCN;" но это не помогает.
Брандмауэры отключены на моем компьютере и на сервере;
McAfee AV на моем компьютере, управляемый через ePO;
SQL Server 2005 x64 работает на Win2k3 x64;
Windows 7 без установленного SP1;
cliconfg.exe -> активный протокол - только tcp / ip;
При необходимости могу предоставить дополнительную информацию.