Pergunta

Eu tenho um velho .NET 1.0 webapp que precisa de um pouco de manutenção feito sobre ele. Eu usei o auto-atualizador para atualizá-lo para o .NET 3.5 (e também mais tarde tentou 2.0), mas agora ele não pode se conectar ao banco de dados.

Na superfície isto parece um problema de noob string de conexão, mas eu estou pensando que é mais provável que seja relacionado a algum problema sutil do upgrade.


eu recebo a mensagem de erro genérico:

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


O código fonte é bastante básico, sem sinos ou assobios:

protected static SqlConnection objConn;

objConn = new SqlConnection(strConnectionString);

try
{
    objConn.Open();
}

e também tentou-o como:

using (objConn = new SqlConnection(strConnectionString))
{
    objConn.Open();
    ...
}

A seqüência de conexão vem do web.config, e usando o depurador para definir um ponto de ruptura e olhar através das propriedades da conexão antes de tentar abri-lo, eu posso ver que o encontrou a seqüência de conexão corretamente:

connectionString = "Data Source = XXX.XXX.XXX.XXX; Initial Catalog = XXXXXX; User ID = XXXXXX; Password = XXXXXX"


Um punhado de coisas que eu acho que já descartou:

A mensagem de erro é o mesmo se conectar ao SQL Server 2005 ou SQL Server 2000.

Nenhum erro ou aviso na lista de erros VS.

A seqüência de conexão é o mesmo que um par de outros sites que também utilizam o mesmo banco de dados, então eu sei que a seqüência de conexão está correto.

Eu tentei tê-lo ligar do meu computador local (onde eu possa conectar-se aos bancos de dados via SQL Query Analyzer) e do servidor web normal, por isso não é um problema de firewall, nem é uma questão-conexões max.

É a conexão com o endereço IP do servidor, por isso não é um problema com o navegador do computador (e outros webapps pode conectar bem.

TCP e pipes nomeados são os protocolos de rede 2 habilitado no servidor SQL.

Adicionando "Rede de Bibliotecas = DBMSSOCN;" à cadeia de conexão muda a mensagem de erro para incluir "provedor: provedor TCP, erro" (não havia outra coisa que mudou na cadeia de ligação no outro dia que também tinha que afetar, mas eu não consigo lembrar o que agora.)


Eu já olhei através de 3 outras mensagens semelhantes sobre estouro de pilha:
(Não é possível listar links aqui porque eu sou um novo usuário, mas o seu ID pergunta é se alguém quer link para eles em um comentário são: 63875, 1038888, 846479)
E este artigo em outro site teve algumas boas idéias de coisas para tentar que não quer ajudar:
http://weblogs.sqlteam.com/tarad/archive/ 2008/05/23 / 60609.aspx


Meu melhor palpite é que é algo causado pela atualização entre as versões .net -? Talvez errado algo no web.config

É um aplicativo C #, muito pequena / básico, mas foi dividido em três projetos.

Foi útil?

Solução

Escrever um aplicativo de console que não faz nada, mas tente se conectar ao banco de dados usando o código que você postou. Codificar a seqüência de conexão no programa console.

Em outras palavras, remova todas as distrações para se certificar de que o código do núcleo que você está tentando executar realmente funciona corretamente.

Outras dicas

Como nunca houve uma solução real previsto para este problema, aqui é o que me ajudou:

Eu tinha exatamente o mesmo problema quando eu promovi uma aplicação perfeitamente executar ASP.NET 2.0 para .NET 3.5. O aplicativo web está sendo hospedado pelo IIS 5.1 no Windows XP e estou usando o SQL Server Express 2005. Eu estou usando a seguinte seqüência de conexão no meu web.config:

<add name="myDbConnection" providerName="System.Data.SqlClient" connectionString="Data Source=http://localhost;Server=.\SQLEXPRESS;Initial Catalog=MyDatabaseName;Integrated Security=True"/>

Então, como você vê, eu estou fazendo nenhuma conexão tcp aqui ou se conectar a um servidor remoto. Eu só estou ligando a instância SQLEXPRESS no localhost através de pipes nomeados. É por isso que eu pensei, ele não terá absolutamente nada a ver com permitindo conexões remotas no SQL Server 2005. Mas como eu descobri, ele faz! (Eu não sei o motivo real para isso!) Eu passei algumas horas para descobrir isso, então talvez isso ajude alguém ...

O que você tem a fazer (por favor, use o Google para os detalhes):

  1. Permitir locais e remotos conexões via SQL Server 2005 superfície área Configuration Tool (I escolher a opção "Usar ambos TCP / IP e pipes nomeados")
  2. Ative o serviço navegador do SQL Server
  3. Defina a porta de escuta TCP para 1433 para todos os IPs através da ferramenta Server Configuration Manager SQL
  4. Aproveite o seu aplicativo web em execução: -)

Por tudo isto é necessário para sucesso se conectar a partir de um NET 3.5 Web App para o SQL Server quando ele já trabalha a partir de .NET 2.0 está além de mim!

De acordo com o este , SQL 2005 não vem configurado para permitir ligações locais ou remotos de entrada e você tem que habilitá-lo a si mesmo.

Eu estou certo que você já passaram por estas etapas já, mas ... tentar ativar a conexão remota para o SQL Server e ativar o serviço navegador do SQL Server. Um passo a passo para ambos podem ser encontrados aqui .

Você pode tentar usar outro tipo de cadeia de conexão. Meus seqüências de conexão são geralmente formatado como:

<add name="DataFrom" connectionString="SERVER=[servername];Database=[dbname];UID=[userid];PWD=[password];"/>

são os outros aplicação você disse que está trabalhando também .NET 3.5 aplicações?


Também estou curioso como você conseguiu este pedaço de código de trabalho

using (var = new SqlConnection(strConnectionString))
{
    objConn.Open();
    ...
}

Eu acho que você quer dizer

using (objConn = new SqlConnection(strConnectionString)) 

certo?

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