Pergunta

Ocorreu um erro ao estabelecer uma conexão com o servidor.Ao conectar-se ao SQL Server 2005, essa falha pode ser causada pelo fato de que nas configurações padrão o SQL Server não permite conexões remotas.(fornecedor:Provedor de Pipes Nomeado, erro:40 - Não foi possível abrir conexão com SQL Server)

Olá, sou novo no desenvolvimento no SQL Server 2005.Trabalhei por vários anos com o SQL Server 2000, mas depois de fazer as coisas habituais que faço para me conectar ao servidor, recebo essa exceção no servidor web.

Existem vários links no google que me apontam para possíveis soluções, mas nenhum deles resolveu meu problema.Fiz alterações na caixa de diálogo "Área de superfície, qualquer que seja..." (Que diabos é isso???Por que o SQL Server mudou tanto???Parece tão complicado agora).

Garanti que o SQL Server 2005 esteja configurado corretamente para permitir conexões de entrada na instância do servidor de banco de dados.Eu também selecionei Automático como o tipo de inicialização para iniciar o serviço SQL Server Browser automaticamente sempre que o sistema for iniciado.E não, não há firewall em execução.

Eu tentei alterar a string de conexão para conectar usando uma porta, para conectar usando o IP, para conectar usando o nome da instância...

Nada parece funcionar, ainda estou recebendo o mesmo erro.Alguma dica?

Respondendo às perguntas que as pessoas fizeram:Sim, posso me conectar usando o Management Studio de um computador diferente.Sim, tenho certeza de que está configurado para aceitar TCP/IP local e remoto e pipes nomeados.Sim, reiniciei o servidor.

Estou usando o modo de segurança misto, que já habilitei.Já habilitei o usuário sa.Consigo me conectar ao banco de dados usando um arquivo .udl e verifiquei se minha cadeia de conexão está OK.Posso me conectar ao banco de dados usando ferramentas de cliente DBArtisan e SQL Server.Posso fazer isso no servidor e em uma máquina diferente.Mesmo com tudo isso...

O site ainda não consegue se conectar.

Nova atualização...Tenho lutado o dia todo com esse problema e ainda não descobri a causa.Parece que a mensagem de erro que postei é um erro genérico que o .net apresenta quando não consegue se conectar.Coloquei lixo na string de conexão (digitando servidores que não existem) e ainda recebo o mesmo erro.

Estas são algumas das strings de conexão que usei no servidor:

connectionString="Segurança Integrada=SSPI;Fonte de dados=SERVIDOR;Catálogo inicial=db;Biblioteca de Rede=DBMSSOCN;"

connectionString="Fonte de dados=SERVIDOR;Catálogo inicial=db;ID do usuário=sa;Senha=xxxx;"

connectionString="Fonte de dados=SERVIDOR\MSSQLSERVER;Catálogo inicial=db;ID do usuário=sa;Senha=xxxx;"

Tentei registrar a instância do sql server usando algum comando estranho, descobri isso aqui:http://kb.discountasp.net/article.aspx?id=1041Para fazer isso usei a ferramenta aspnet_regsql.exe.Ainda não está funcionando...

Também sei que o servidor possui a versão mais recente do MDAC instalada.A única coisa que suspeito é que o servidor possui dois mecanismos de banco de dados:SERVIDOR e servidor\sqlexpress

Isso tem algo a ver com o problema?

Foi útil?

Solução 9

Resolvi o problema que tive com a conexão.O problema estava no meu aplicativo.A causa do problema foi que uma cadeia de conexão para o banco de dados de desenvolvimento (em vez do banco de produção) foi codificada por uma das caixas de diálogo que gera os conjuntos de dados.Esta caixa de diálogo colocou a string de conexão no web.config e em um arquivo de código-fonte oculto chamado "Settings.settings.cs".O problema foi resolvido fixando a cadeia de conexão no local correto.

A mensagem de erro era totalmente enganosa, mas consegui descobrir isso seguindo todos os métodos apresentados no rastreamento de pilha.

Portanto, se você encontrar essa mensagem de erro, há inúmeras causas possíveis.Sua primeira aposta é seguir os passos usuais para esse erro, que são verificar se o servidor permite conexões remotas e locais e reiniciar o serviço do navegador.

Se isso não funcionar, verifique o rastreamento de pilha, procure o código que está em sua aplicação, coloque um ponto de interrupção lá e explore todas as propriedades da string de conexão.Pelo menos foi assim que resolvi.

Outras dicas

A única coisa que suspeito é que o servidor possui dois mecanismos de banco de dados:SERVIDOR e servidor\sqlexpress

Acho que essa é a origem do problema.Com qual você pretende se conectar?Você precisa especificar a "instância" à qual está se conectando.

Supondo que você pretenda se conectar à instância SERVER, sua string de conexão deverá ficar assim (assumindo o nome da instância padrão):

Fonte de dados=SEUSERVIDOR\MSSQLSERVER;Catálogo inicial=db;ID do usuário=sa;Senha=xxxx;

Ou para sql express a string de conexão fica assim:Fonte de dados=SEUSERVIDOR\sqlexpress;Catálogo inicial=db;ID do usuário=sa;Senha=xxxx;

Você consegue se conectar ao SQL Server por meio do Management Studio de uma máquina diferente?Isso pode ajudá-lo a definir se é a configuração do SQL Server ou a configuração da cadeia de conexão.

Verifique novamente a configuração da área de superfície e certifique-se de que as conexões TCP/IP sejam permitidas.

Isso pode ser muitas coisas.A primeira coisa que eu verificaria é ter certeza de que você pode se conectar ao servidor usando o SQL Server Management Studio.Segundo, verifique sua string de conexão para ter certeza de que está correta.A configuração da área de superfície não deve ser aplicada a conexões locais.

Tente reinstalar o MDAC mais recente no servidor.Certa vez tive um problema semelhante e isso resolveu.

[http://www.microsoft.com/downloads/details.aspx?familyid=6c050fe3-c795-4b7d-b037-185d0506396c&displaylang=en][1]

Com base no erro, parece que o código está tentando se conectar usando pipes nomeados, em vez de TCPIP.Na verdade, você pode precisar indicar especificamente em sua cadeia de conexão que o provedor SQL deve se conectar usando tcpip, para que sua cadeia de conexão fique semelhante à mostrada abaixo.

Usando autenticação integrada (windows):

Segurança Integrada=SSPI;Fonte de dados=NOME DO SERVIDOR;Catálogo Inicial=NOME DO BANCO DE DADOS; Biblioteca de Rede=DBMSSOCN;

Usando autenticação SQL:

UID =NOME DE USUÁRIO;PCD =SENHA;Fonte de dados=NOME DO SERVIDOR;Catálogo Inicial=NOME DO BANCO DE DADOS; Biblioteca de Rede=DBMSSOCN;

Já vi algo parecido com isso acontecer antes, onde, por algum motivo, "pipes nomeados" são usados ​​​​por padrão como camada de transporte/conexão, especialmente porque o aplicativo da web e o servidor sql estão sendo executados na mesma máquina.Geralmente sempre uso o tcpip como transporte ou biblioteca de rede.

Outra técnica de solução de problemas é usar um UDL (ou arquivo de link de dados) para solucionar problemas de conexão.Isso permite alternar entre provedores de conexão (ODBC, OLEDB, etc.) e definir outras opções de conexão.

  1. Na área de trabalho da máquina, clique com o botão direito e escolha novo -> documento de texto.
  2. Renomeie o arquivo *.txt para TestConnect.udl (o nome não importa, apenas precisa ser a extensão .udl).Você deverá ver o ícone mudar de um ícone de arquivo de texto para um ícone que mostra um computador no topo de uma grade de dados ou algo parecido (em outras palavras, as janelas devem ter um ícone para ele).
  3. Agora clique duas vezes no arquivo e você verá um miniaplicativo "Data Link Properties" aparecer.
  4. Clique na guia Provedor e você verá uma lista de diferentes provedores de conexão.Eu começaria escolhendo apenas "Microsoft OLE DB Provider for SQL Server".Podemos usar isso para confirmar se o OLE DB pode se conectar ou não.
  5. Clique em Avançar e insira o nome do servidor ou endereço IP.Selecione Segurança integrada do Windows NT.(Você sempre pode voltar e alterá-lo para usar um login sql.) Neste ponto você pode clicar em "Testar Conexão".Se a conexão for bem-sucedida, selecione um nome de banco de dados na lista suspensa.
  6. Por último, caso a conexão falhe, selecione a aba “Todos”, procure por “Biblioteca de Rede” e edite seu valor, configurando-o como “DBMSSOCN”.
  7. Volte para a guia de conexão e clique em “testar conexão” novamente.
  8. Repita as etapas 4 e 5 desta vez com o "SQL Native Client" selecionado.

Espero que isto ajude.

No prompt faz:

osql -E -S

...você recebeu um aviso?

Você tentou especificar o nome da instância na string de conexão?Aparentemente, o SQL Server Express, em particular, é meticuloso em ter o nome da instância.

Também comecei a fuçar no SQL Server Configuration Manager.Então você clicou em "Configuração de rede do SQL Server 2005" e depois olhou em "Protocolos para Nome da instância"?E você habilitou TCP/IP e Named Pipes?

Você também olhou para "Configuração do SQL Native Client" -> "Protocolos de cliente" e viu que TCP/IP e Named Pipes também estão habilitados lá?

Usando a ferramenta Configuração da área de superfície do SQL Server 2005, clique em "Configuração da área de superfície para serviços e conexões" e, em "Mecanismo de banco de dados" -> "Conexões remotas", o que está selecionado?Como parece que você está tentando se conectar usando Named Pipes, você precisará certificar-se de que "Conexões locais e remotas" e "usando tcp/ip e pipes nomeados" estejam selecionados.

Como você provavelmente sabe, depois que qualquer alteração for feita, você terá que parar e reiniciar a instância do SQL Server por meio do Management Studio (você não precisa reinicializar a máquina inteira, embora reinicializar a máquina inteira o leve até lá).

E meu último conselho.Afaste-se disso por um tempo e tire sua mente disso por alguns minutos.Ao mergulhar novamente, você poderá encontrar algo que perdeu ou negligenciou antes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top