128 votes

La connexion au serveur SQL fonctionne parfois

Une application ADO.Net n'est que parfois capable de se connecter à un autre serveur sur le réseau local. Il semble aléatoire qu'une tentative de connexion donnée réussisse ou échoue. La connexion utilise une chaîne de connexion de la forme :

Serveur=THESERVER \TheInstance ;Database=TheDatabase;User Id=TheUser ; Password=ThePassword ;

l'erreur retournée est :

Le délai de connexion a expiré. Le délai d'attente s'est écoulé lors de la tentative de consommation de l'accusé de réception de la poignée de main de pré-connexion.
Cela peut être dû au fait que la poignée de main de pré-connexion a échoué ou que le serveur n'a pas pu répondre à temps.
La durée de la tentative de connexion à ce serveur est de - [Pre-Login] initialization=42030 ; handshake=0 ;

L'application .NET est une petite application de test qui exécute le code suivant :

using (SqlConnection conn = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn))
{
    conn.Open();
    int rowCount = (int)cmd.ExecuteScalar();
}

LeTableau est petit, seulement 78 rangs.

Cependant, sur le même machine Lorsque l'application .NET reçoit cette erreur, je peux me connecter à THESERVER à l'aide de SSMS et de l'ID utilisateur/mot de passe indiqué dans la chaîne de connexion.

Pourquoi la connexion peut-elle échouer à partir d'une application ADO.Net, mais réussir avec des informations d'identification identiques à partir de SSMS ?

4voto

smwikipedia Points 5491

J'ai corrigé cette erreur sur Windows Server 2012 et SQL Server 2012 en activant IPv6 et en débloquant le port entrant 1433.

4voto

Chris Catignani Points 11

C'est une autre solution à l'erreur de l'OP... il y a beaucoup de solutions comme il y a beaucoup de causes.

J'avais installé l'édition Developer de MSSql 2019. Par défaut, son installation est verrouillée... il fonctionnera bien s'il est juste sur votre machine de développement. Si vous l'installez sur une machine autre que votre boîte de développement, vous devrez mettre à jour la règle du pare-feu.

Par défaut... le profil de pare-feu pour "MS SQL Server" est "Privé".

Vous devrez peut-être activer les profils Public et/ou Domaine. Utilisez Domaine uniquement si vous vous authentifiez sur un domaine.
Profils du pare-feu de Windows
Firewall profiles

De plus, pour activer toutes les adresses IP (comme dans la réponse acceptée), tout ce que vous devez faire est de

Réglez "Listen All" sur oui dans les propriétés TCP/IP.

Options des propriétés TCP/IP
TCP/IP Properties Options

3voto

user270576 Points 842

Mon exécutable qui a été construit à l'aide de .NET Framework 3.5 a commencé à signaler ces problèmes de connexion dans environ la moitié des cas après l'installation de certaines mises à jour de Windows récemment (semaine du 7 août 2017).

Les échecs de connexion ont été causés par .NET Framework 4.7 qui a été installé sur l'ordinateur cible (l'installation automatique des mises à jour de Windows était activée). https://support.microsoft.com/?kbid=3186539

La désinstallation de .NET Framework 4.7 a résolu les problèmes de connexion.

Apparemment, il y a un changement de rupture dans .Net Framework 4.6.1 - TransparentNetworkIPResolution La mise à jour de la chaîne de connexion conformément à l'article a également résolu le problème sans qu'il soit nécessaire de revenir en arrière dans la version du framework.

2voto

Myk Agustin Points 483

J'ai eu le même problème, j'ai réussi à le résoudre en ouverture/validation le port 1433 et tcp/ip dans SQL Server Configuration Manager et ensuite Redémarré le serveur

enter image description here

2voto

chainstair Points 54

Avant de perdre plus de temps à résoudre le problème, comme moi, essayez juste de redémarrez votre machine Windows . Cela a marché pour moi après avoir appliqué toutes les autres solutions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X