Question

J'ai un vieux .net 1.0 webapp qui a besoin d'un peu d'entretien fait sur elle. Je l'ai utilisé l'auto-upgrader mettre à niveau vers .Net 3.5 (et a ensuite essayé 2.0) mais maintenant il ne peut pas se connecter à la base de données.

Sur la surface, cela ressemble à un problème de chaîne de connexion noob, mais je pense qu'il est plus susceptible d'être lié à un problème subtil de la mise à niveau.


je reçois le message d'erreur générique:

Une erreur est survenue pendant l'établissement d'une connexion au serveur. Lors de la connexion à SQL Server 2005, cet échec peut être causé par le fait que les paramètres par défaut SQL Server ne permet pas les connexions à distance. (Fournisseur: Fournisseur de canaux nommés, erreur: 40 - Impossible d'ouvrir une connexion à SQL Server)


Le code source est assez basique, sans cloches ou de sifflets:

protected static SqlConnection objConn;

objConn = new SqlConnection(strConnectionString);

try
{
    objConn.Open();
}

et aussi essayé comme:

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

La chaîne de connexion provient du web.config, et en utilisant le débogueur pour définir un point de rupture et de regarder à travers les propriétés de la connexion avant d'essayer de l'ouvrir, je peux voir que son trouve la chaîne de connexion correctement:

connectionString = "Data Source = XXX.XXX.XXX.XXX; Initial Catalog = XXXXX; ID utilisateur = XXXXX; Mot de passe = XXXXX"


Une poignée de choses que je pense que je l'ai Exclue:

Le message d'erreur est le même que la connexion à SQL Server 2005 ou SQL Server 2000.

Pas d'erreur ou des avertissements dans la liste d'erreurs VS.

La chaîne de connexion est le même que deux autres sites qui utilisent également la même base de données, donc je sais que la chaîne de connexion est correcte.

Je l'ai essayé d'avoir le connecter à partir de mon ordinateur local (où je peux connecter aux bases de données via SQL Query Analyzer) et à partir du serveur web normal, donc ce n'est pas un problème de pare-feu, ni un problème max-connexions.

Il est la connexion à l'adresse IP du serveur, de sorte que son pas un problème de navigateur d'ordinateur (et d'autres webapps peuvent se connecter très bien.

TCP et canaux nommés sont les 2 protocoles réseau activés sur le serveur SQL.

Ajout de "bibliothèque réseau = DBMSSOCN;" à la chaîne de connexion modifie le message d'erreur d'inclure « fournisseur: fournisseur TCP, erreur » (il y avait quelque chose d'autre que j'ai changé dans la chaîne de connexion, l'autre jour qui avait également une incidence, mais je ne me souviens pas maintenant.)


je l'ai déjà regardé par 3 autres postes similaires sur débordement de la pile:
(Ne peut pas la liste des liens ici parce que je suis un nouvel utilisateur, mais leur question ID de si quelqu'un d'autre veut faire un lien vers eux dans un commentaire: 63875, 1038888, 846479)
Et cet article sur un autre site avait quelques bonnes idées de choses à essayer cela n'a pas aidé non plus:
http://weblogs.sqlteam.com/tarad/archive/ 2008/05/23 / 60609.aspx


Ma meilleure estimation est que ses quelque chose provoquée par la mise à niveau entre les versions .net - peut-être quelque chose de mal dans le web.config

?

Il est une application C #, assez petit / de base, mais a été divisé en trois projets.

Était-ce utile?

La solution

Ecrire une application console qui ne fait rien, mais essayez de vous connecter à la base de données en utilisant le code affiché. Coder en dur la chaîne de connexion dans le programme de la console.

En d'autres termes, supprimer toutes les distractions pour vous assurer que le code de base que vous essayez d'exécuter fonctionne réellement correctement.

Autres conseils

Comme il n'a jamais été une solution réelle fournie à ce problème, voici celui qui m'a aidé:

J'ai eu exactement le même problème quand je mis à jour une application ASP.NET 2.0 parfaitement en cours d'exécution à .NET 3.5. L'application web est hébergé par IIS 5.1 sur Windows XP et je l'utilise SQL Server Express 2005. J'utilise la chaîne de connexion suivante dans mon web.config:

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

Comme vous le voyez, je fais pas de connexion tcp ici ou la connexion à un serveur distant. Je suis juste connecter l'instance SQLEXPRESS sur le localhost à travers les canaux nommés. Voilà pourquoi je pensais, il aura absolument rien à voir avec l'autorisation des connexions à distance sur SQL Server 2005. Mais comme je l'ai découvert, il le fait! (Je ne sais pas la raison réelle pour cela!) J'ai passé quelques heures pour découvrir cela, alors peut-être que cela aide quelqu'un ...

Qu'est-ce que vous avez à faire (s'il vous plaît utiliser google pour les détails):

  1. Autoriser les connexions locales et à distance via SQL Server 2005 Configuration de la surface outil (Je choisis l'option "Utilisation de TCP / IP et canaux nommés")
  2. Activer le service SQL Server Browser
  3. Définissez le port TCP d'écoute pour 1433 toutes les adresses IP via l'outil SQL Server Configuration Manager
  4. Profitez de votre application Web en cours d'exécution: -)

Pourquoi tout cela est nécessaire pour se connecter avec succès à partir d'une application Web .NET 3.5 à SQL Server quand il fonctionne déjà de .NET 2.0 est au-delà de moi!

Selon cette , SQL 2005 ne vient pas configuré pour autoriser les connexions locales ou à distance entrants et vous devez lui permettre vous-même.

Je suis sûr que vous avez passé par ces étapes déjà, mais ... essayez d'activer la connexion à distance pour SQL Server et activation du service Explorateur SQL Server. Une procédure pas à pas pour les deux se trouve ici .

Vous pouvez essayer d'utiliser un autre type de chaîne de connexion. Mes chaînes de connexion sont généralement formatées comme:

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

Est-ce que l'autre aplication vous avez dit que travaillent aussi .NET 3.5 applications?


Je suis aussi curieux de savoir comment vous avez réussi à obtenir ce morceau de code de travail

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

Je pense que vous voulez dire

using (objConn = new SqlConnection(strConnectionString)) 

droite?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top