2009-10-16 4 views
0

Я использую VSTS 2008 + .Net 3.5 + C# + SQL Server 2008 Enterprise на Windows Server 2003. Я использую следующую строку подключения, а labtest1 - имя локальной машины, и я подключаюсь к локальной машине, используя ADO.Net. Тогда он всегда терпит неудачу с ошибкой соединения. Но когда я меняю строку соединения с «labtest1» на «.», Соединение не имеет проблемы с тем же кодом клиента ADO.Net. Какие-нибудь идеи, что не так?Проблема с соединением SQL Server

Data Source=labtest1;Initial Catalog=CustomerDB;Trusted_Connection=true;Asynchronous Processing=true 

Вот подробное сообщение об ошибке я получил,

System.Data.SqlClient.SqlException: Произошла ошибка сети связанных или экземпляра конкретных при установлении соединения с SQL Server. Сервер не найден или не был доступен. Проверьте правильность имени экземпляра и настройте SQL Server для удаленного подключения. (поставщик: поставщик Named Pipes, ошибка: 40 - не удалось открыть подключение к SQL Server)

ответ

1

Похоже на проблему конфигурации сервера Sql для меня: пытались ли вы настроить протоколы в конфигурации Sql Server Network? Именованные каналы или TCP/IP должны быть включены.

+0

Когда я открываю диспетчер конфигурации SQL Server, существует 5 элементов, 1. Службы SQL Server; 2. Конфигурация сети SQL Server (32 бит); 3. SQL Native Client 10.0 Конфигурация (32 бит); 4. Конфигурация сети SQL Server; 5. Конфигурация клиента SQL 10.0. Какой из них вы хотите настроить? – George2

+0

Я опубликовал свое подробное сообщение об ошибке, любые идеи, что не так? – George2

+1

В конфигурации сети SQL Server вы найдете узел «Протокол».Какие протоколы включены? Попробуйте включить именованные каналы или tcp/ip. –

1

Когда вы используете "." или «(локальный)», он подключается к экземпляру по умолчанию на вашем ПК, возможно, SQL Server был установлен с экземплярами, и в этом случае вам нужно указать имя экземпляра в строке подключения в формате «SERVER \ INSTANCE_NAME».

В студии управления SQL выполнить этот запрос, чтобы увидеть ваше полный сервер \ имя экземпляра

select @@servername 
+0

Я попытался использовать SSMS для подключения к «labtest1», а затем открыть новую Query Windows для выполнения select @@ servername, результатом будет «LABTEST1». Кажется, что нет ничего плохого? Учитывается ли регистр имени сервера? Любые идеи для дальнейшего анализа? – George2

+0

Я опубликовал свое подробное сообщение об ошибке, любые идеи, что не так? – George2

+1

Так что это не случайные трюки. Предложение tzup будет моим следующим шагом. – invert

1

Я видел этот вопрос ранее с ZoneAlarms блокирующего соединения (на машине пытается подключиться к серверу SQL). Я бы потратить некоторое время на изучение этой области вокруг брандмауэров и т.д.

Надеются, что это помогает

+0

Какое ваше предложение исправить мою проблему? – George2

+0

Что значит «ZoneAlarms»? – George2

+1

Я видел 2 примера этого. в примере, который я видел вчера, произошло значительное обновление Windows, тогда ZoneAlarm пришлось переконфигурировать, чтобы снова разрешить соединения. Если у вас есть брандмауэр, я бы проверял заблокированный список. Надеюсь, это поможет – Dean

1

У вас есть сетевой протокол Named Pipes включен в сетевой конфигурации? (В SQL Server Configuration Manager - SQL Server 2005, это то, что у меня есть, может отличаться в 2008 году - вы должны быть в состоянии проверить эту настройку)

+1

Для SQL Server 2005 он называется «Конфигурация поверхности SQL Server» в разделе " Remote Connections "- это возможность разрешить удаленные подключения, а не только локальные. – invert

+0

Спасибо tzup! Он не включен. После включения Named Pipe он работает. Почему SQL Server будет использовать именованный канал? Я думаю, что TCP/IP следует использовать? – George2

+0

Привет, КБ, я смущен, почему используется Именованная труба? Я думаю, что TCP/IP следует использовать? – George2

1

Попробуйте выполнить ping по имени компьютера: ping labtest1. если он не находит сервер, попробуйте ping labtest1.mydomainname.com с доменным именем. Если это работает, вам просто нужно добавить/исправить псевдонимы DSN в контроллере домена или просто повторно войти в систему.

+0

Пинг работает. После включения Named Pipe в диспетчере конфигурации SQL Server он работает. Почему SQL Server будет использовать именованный канал? Я думаю, что TCP/IP следует использовать? Какие-нибудь дальнейшие идеи? – George2

1

Еще один вопрос - и может быть не актуальным - но вы не указали модель безопасности, по крайней мере, не в строке, предоставленной в качестве образца.

Я бы ожидал увидеть: Integrated Security = True (учитывая его локальную машину) в строке соединения.

Другое, что может быть уместно, - как уже упоминалось, - протоколы, я хотел бы убедиться, что TCP/IP включен.

+0

TCP/IP включен. Но Named Pipe не включен. После включения Named Pipe он работает. Но почему Named Pipe используется, кроме TCP/IP? – George2

+1

Предположительно, потому что его местная связь - хотя, честно говоря, я ожидал, что это провалится в другую сторону! – Murph

+0

Вы хотите сказать, что локальная связь всегда будет использовать Named Pipe? Если да, есть ли у вас какие-либо документы для подтверждения? – George2

Смежные вопросы