Comment corriger l'erreur «Fournisseur de canaux nommés, erreur 40 - Impossible d'ouvrir une connexion à« SQL Server »?

152

Je n'arrive pas à me connecter à ma base de données depuis un site. J'obtiens cette erreur:

Fournisseur de canaux nommés, erreur: 40 - Impossible d'ouvrir une connexion à SQL Server

J'ai essayé d'utiliser l'adresse IP locale pour me connecter ainsi qu'une adresse publique. J'ai essayé:

  1. Oui, le site peut communiquer avec le serveur
  2. Les canaux nommés / TCP sont activés.
  3. Les connexions à distance sont autorisées.
  4. Le pare - feu Windows est désactivé
  5. Création d'une exception pour le port 1433 dans le pare-feu Windows.
  6. Tout activé dans SQL Server Configuration Manager.

Que puis-je faire d'autre ici?

Damien
la source
2
Il peut être utile de vérifier si SQL Server utilise réellement le port 1433. Il peut utiliser autre chose que le port par défaut.
Rajeev Shenoy
Assurez-vous également, lors du ping, que le nom du serveur est correctement défini (ou bien écrit). C'était le problème dans mon cas!
Yann Chabot
@RajeevShenoy: Comment pouvez-vous dire sans connexion (quel est le problème)? Je peux dire au port, une fois connecté, en utilisant netstat mais cela ne fonctionne que s'il y a une connexion.
MSIS

Réponses:

117

Résoudre ce problème est très simple:

  1. Accédez au panneau de configuration.
  2. rechercher des services.
  3. Ouvrez la fenêtre Services locaux à partir des résultats de votre recherche
  4. Redémarrez votre service MSSQLSERVER.

Capture d'écran des étapes:

Capture d'écran des étapes

Kazem
la source
1
Wow, Management Studio ne démarre pas mon service même s'il était réglé sur automatique Merci
johnny 5
Merci, cela m'a aidé. Vais-je continuer à devoir démarrer le service à partir d'ici à chaque fois? Je n'avais pas à le faire auparavant.
naz786
3
Et si ce service n'est pas disponible? J'ai installé SQL Server 17. Je ne vois pas ce service ....
Ciaran Gallagher
1
En effectuant une sauvegarde de la base de données de 170 Go, le service s'est arrêté. Grâce à cela, il n'a fallu que 5 minutes pour redémarrer le serveur SQL qui était utilisé par un client important. Merci beaucoup.
Shondeslitch
2
Toutes les actions ont été vérifiées, mais le redémarrage n'a pas fonctionné pour moi. Toujours la même erreur.
JayPex
89

Et la solution la plus simple - vérifiez si votre slash est de retour ...

J'ai passé environ une heure à essayer de comprendre ce qui ne va pas avec SERVER / INSTANCENAME lorsque tout est configuré correctement, les tuyaux nommés, les droits d'accès des utilisateurs ... et tout à coup cela m'a frappé, ce n'est pas une barre oblique, c'est une barre oblique inverse ( \).

L'horreur, la honte ...

mizuki nakeshu
la source
2
J'ai eu le problème de l'OP et il s'est avéré que je manquais les informations SERVER / INSTANCENAME (il y avait un point à la place).
LuxDie
@LuxDie Où mettez-vous SERVER \ INSTANCENAME et où il se trouve?
tom_mai78101
Celui-ci est la clé, il ne faut pas oublier qu'il faut se connecter à une "base de données" qui est hébergée dans une insance sur un serveur. Cette erreur est générée si vous n'utilisez que le nom d'hôte du serveur pour la connexion et que vous essayez d'utiliser le nom d'instance comme base de données ou vice versa.
MichaelHuelsen
J'ai résolu mon problème. Chaîne de connexion de travail:Server=MyServerName\DOLPHIN=Trusted_Connection=True;Database=DolphinPlatform pendant le développement (C #), je me connectais à un serveur MSSQL 2017 installé localement, mais lorsque je suis allé le déployer, le serveur distant installé par l'éditeur du logiciel fonctionnait en tant que Instance. J'ai continué à penser que c'était un problème d'authentification parce qu'il fonctionnait en tant que service ou quelque chose jusqu'à ce que je trouve cela.
Alan
49

C'est un processus en trois étapes vraiment après l'installation de SQL Server:

  1. Activer les canaux nommés SQL Config Manager -> SQL Server Network Consif -> Protocoles -> Named Pipes -> Clic droit -> Redémarrer

canaux nommés activés

  1. Redémarrez le serveur SQL Config Manager -> Services SQL Server -> SQL Server (SQLEXPRESS) -> Clic droit -> Redémarrer

  2. Utilisez des noms de serveur et d'instance appropriés (les deux sont nécessaires!) En général, ce serait . \ SQLEXPRESS , par exemple, voir la capture d'écran de la boîte de dialogue de connexion QueryExpress.

entrez la description de l'image ici

Voilà.

Pompair
la source
puisque vous avez une réponse relativement tardive. Qu'est-ce que c'est, lorsque vous avez un service qui communique correctement avec votre serveur SQL, puis 3 heures après son exécution, il commence à obtenir cette erreur qui persiste pendant environ 10 minutes. Ensuite, le service continue de fonctionner comme avant l'erreur. ???
TS
C'est pour les connexions locales? Qu'est-ce qui est également nécessaire pour que les connexions à distance via le réseau fonctionnent?
Kissaki
19

Je venais d'installer le développeur SQL SERVER 2012. Lorsque je créais mon premier package SSIS, j'ai reçu cette erreur de canaux lorsque j'essayais de créer une tâche de connexion de données dans SQL Server 2012 Data Tools dans la zone Gestionnaire de connexion. J'ai résolu avec l'aide du post ci-dessus.

Si vous choisissez une instance nommée et que vous appelez votre instance nommée SSQDatabase1 et que le nom de votre ordinateur est PCX1. Vous devez entrer PCX1 \ SSQDatabase1 et non seulement SSQDatabase1 ou vous recevrez l'erreur de canaux nommés.

rockz1
la source
16

Un thread sur MSDN Social, Re: Named Pipes Provider, erreur: 40 - Impossible d'ouvrir une connexion à SQL Server , a une liste assez décente de problèmes possibles liés à votre erreur. Vous voudrez peut-être voir si l'un d'entre eux pourrait être ce que vous vivez.

  • Chaîne de connexion incorrecte, telle que l'utilisation de SqlExpress
  • Named Pipes (NP) n'était pas activé sur l'instance SQL
  • La connexion à distance n'a pas été activée
  • Serveur non démarré ou pointant vers un serveur non réel dans votre chaîne de connexion
  • Autres raisons telles qu'un contexte de sécurité incorrect
  • essayez des tests de connectivité de base entre les deux machines sur lesquelles vous travaillez
Khan
la source
Je suis passé par eux, malheureusement, cela n'a pas aidé. :(
Damien
4
D'accord, découvrez-le. Il s'avère que lorsque j'ai installé le serveur, j'ai fait une instance nommée. Vous ne pouvez pas vous connecter à une instance nommée de la même manière qu'une instance par défaut. Donc, source de données: localhost \ nom de l'instance qui fonctionne. Je ne pouvais toujours pas le faire avec une adresse IP, mais heureux de pouvoir enfin se connecter.
Damien
Heureux d'entendre, mais par curiosité pouvez-vous vous y connecter en utilisant ip.ip.ip.ip/NamedInstance?
Khan
10

Je viens d'activer TCP / IP, VIA, les tuyaux nommés dans le gestionnaire de configuration du serveur SQL, mon problème a été résolu, reportez-vous à ceci pour plus d'informations Résolution de l'erreur de tuyaux nommés 40

Samanthe
la source
lien mort. des informations sur ce qu'il a dit?
Kissaki
7

Utilisez SERVER \\ INSTANCE NAME . L'utilisation de la double barre oblique inverse dans mon projet a résolu mon problème.

Tamizh venthan
la source
Celui-ci a également fonctionné pour moi, mais quelqu'un peut-il me dire pourquoi cela a fonctionné?
GWR
Je dirais que la chaîne s'échappe, mais cela dépend du contexte
mizuki nakeshu
Si cette chaîne est en code C # @"server\instance"ou "server\\instance"devrait fonctionner. Si c'est dans un fichier de configuration, alors vous voulez juste le serveur de texte brut \ instance.
Denise Skidmore
7

Merci à Damian ...

Tuyaux nommés TCP / IP ... tous deux activés

Web Config .... (pour localhost)

<add name="FooData" connectionString="Data Source=localhost\InstanceName;Initial Catalog=DatabaseName;Integrated Security=True;" providerName="System.Data.SqlClient" />
Terri
la source
5

J'ai eu le même problème. J'ai passé environ 6 heures à migrer certains serveurs. J'ai essayé toutes les suggestions disponibles sur ce sujet et d'autres.

La solution était aussi simple que le redémarrage du serveur!

halloweenlv
la source
1
Malheureusement, la réinitialisation du serveur a également résolu le problème pour moi. Toutes les autres suggestions mentionnées ont été tentées en vain.
MrShmee
3

dans mon cas, j'avais un serveur autonome, j'ai changé le port par défaut du port du serveur sql 1433 dans le gestionnaire de configuration en un certain nombre et redémarré le service de service sql pour prendre effet, j'ai pu me connecter au serveur sql via le studio de gestion si je me connecte au serveur. mais je n'ai pas pu me connecter depuis ma machine locale via le serveur SQL, j'obtenais l'erreur:

Une erreur liée au réseau ou spécifique à une instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou inaccessible. Vérifiez que le nom de l'instance est correct et

que SQL Server est configuré pour autoriser les connexions à distance. (fournisseur: fournisseur de canaux nommés, erreur: 40 - Impossible d'ouvrir une connexion à SQL Server) (Microsoft SQL Server, erreur: 5)

J'ai vérifié et vérifié tout ce qui suit

-Les canaux nommés / TCP sont activés. -Les connexions à distance sont autorisées. -Windows Firewall est désactivé -Créé une exception pour le portin Windows Firewall (ce n'était pas nécessaire dans mon cas car le serveur est dans le même réseau de sous-réseau). -Activé tout dans SQL Server Configuration Manager.

puis j'ai modifié le numéro de port à la valeur par défaut 1433 et redémarré le service de serveur SQL, et le problème a été résolu et je suis capable de connecter le serveur SQL à partir de mon studio de gestion local.

balu
la source
3

J'ai eu le même problème. J'utilise MSSQL Server Management Studio 2017 et j'ai résolu ce problème en suivant ces étapes:

  1. Vérifiez le bon fonctionnement des services SQL Server Services ou non.
  2. Vérifiez également le bon fonctionnement de SQL Server (MSSQLSERVER).
  3. Vérifiez également le bon fonctionnement du navigateur SQL Server.
  4. Redémarrez SQL Server (MSSQLSERVER)

et l'a réparé.

Murat
la source
3
Merci pour cela! Le navigateur SQL Server a été désactivé, donc cela a résolu le problème pour moi!
Sam
2

Essayez les étapes suivantes:

  1. Ouvrez la fenêtre Services (ouvrez la "boîte d'exécution" et tapez services.msc).

  2. Recherche de services SQL (avec préfixe SQL).

  3. Démarrez-les (si vous ne pouvez pas démarrer. Allez à l'étape 4).

  4. Cliquez avec le bouton droit sur chaque service -> Propriétés -> Passez à l'onglet "Connexion" -> choisissez la connexion en tant que "Local ..." -> 0K. Puis redémarrez les services SQL.

Essayez Open SQL et connectez la base de données.

Harry Ho
la source
2

Vous trouverez très probablement que votre nom de base de données n'est pas correct, vous verrez le nom du serveur dans VS comme "DESKTOP-0I14BKI" mais si vous ouvrez SSMS, vous verrez DESKTOP-0I14BKI \ SQLBLAHBLAH , ajoutez simplement " \ SQLBLAHBLAH " (nom de l'instance ) à votre "nom de serveur" dans les propriétés de connexion VS.

Vous verrez : entrez la description de l'image ici

Pour réparer: entrez la description de l'image ici

Scott
la source
2

TL, DR; Votre instance SQL Server utilise des ports dynamiques qui ne fonctionnent pas. Forcer SQL Server à utiliser le port statique # 1433.

Détails complets : Tout d'abord, ce problème est plus probable si vous avez un mélange d'instances par défaut et nommées ou d'instances nommées uniquement (ce qui était mon cas).

Concept clé : chaque instance de Microsoft SQL Server installée sur un ordinateur utilise un port différent pour écouter les demandes de connexion entrantes. L'instance par défaut de SQL Server utilise le port # 1433. Lorsque vous installez des instances nommées, elles commenceront à utiliser des ports dynamiques, ce qui est décidé au moment du démarrage du service Windows correspondant à l'instance SQL Server nommée.

Mon code ne parvenait pas (avec le code d'erreur 40) à se connecter à la seule instance SQL Server nommée que j'avais sur ma machine virtuelle. Vous pouvez essayer ci-dessous les solutions possibles:

Solution n ° 1 : le code client essayant de se connecter à l'instance SQL Server prend l'aide du service de navigateur SQL Server pour déterminer le numéro de port sur lequel votre instance nommée écoute les connexions entrantes. Assurez-vous que le service de navigateur SQL est en cours d'exécution sur votre ordinateur.

Solution n ° 2 : vérifiez le numéro de port (en couleur jaune) que votre instance nommée de SQL Server utilise à partir du gestionnaire de configuration SQL Server, comme indiqué dans l'instantané ci-dessous:

entrez la description de l'image ici

Utilisez ce numéro de port explicitement dans votre chaîne de connexion ou avec sqlcmdci-dessous:

sqlcmd -s mymachinename,11380 -i deleteDB.sql -o SQLDelete.txt

Solution n ° 3 : forcez votre instance nommée à utiliser le port n ° 1433 qui est utilisé par l'instance par défaut. N'oubliez pas que cela ne fonctionnera que si vous n'avez aucune instance SQL Server par défaut sur votre ordinateur, car l'instance SQL Server par défaut utilise déjà le port # 1433. Le même numéro de port ne peut pas être utilisé par deux services Windows différents.

Marquez le TCP Dynamic portschamp vide et le TCP Portchamp 1433.

entrez la description de l'image ici

Modifiez le numéro de port dans votre chaîne de connexion comme indiqué ci-dessous:

sqlcmd -s mymachinename\instanceName -i deleteDB.sql -o SQLDelete.txt

OU

sqlcmd -s mymachinename,1433 -i deleteDB.sql -o SQLDelete.txt

Remarque : chaque modification des paramètres TCP / IP nécessite un redémarrage du service Windows correspondant.

Il est intéressant de noter qu'après avoir résolu l'erreur lorsque je suis retourné au paramètre de port dynamique pour reproduire la même erreur, cela ne s'est pas produit. Pas certain de pourquoi.

Veuillez lire ci-dessous les discussions intéressantes pour en savoir plus sur les ports dynamiques de SQL Server:

Comment configurer le port SQL Server sur plusieurs instances?

Quand un port dynamique est-il «dynamique»?

Quand utiliser un port dynamique TCP et quand utiliser un port TCP?

J'ai obtenu des pistes pour résoudre mon problème à partir de ce blog.

RBT
la source
1

Dans mon cas, j'ai ouvert SQL Server Management Studio et recherché SQLEXPRESS dans mon moteur de base de données. Il y avait deux instances et j'ai sélectionné la bonne.

entrez la description de l'image ici

DivyaMenon
la source
1

Si vous travaillez avec Asp.net core et utilisez appsettings.json, écrivez le serveur en tant qu'hôte local et après écrire le nom de l'instance sql pour le tube nommé activé comme ceci

  "ConnectionString": {
    "dewDB": "server=localhost\\dewelopersql;database=dewdb;User ID=sa;password=XXXXX",
  },
Hamit YILDIRIM
la source
1

Solution très simple

utilisez (local)\InstanceName c'est tout. cela a fonctionné pour moi.

ProgrammationNinja
la source
1

Si vous avez essayé de redémarrer le service MSSQLSERVER et que cela n'a pas fonctionné, cela peut être une solution:

Si vous utilisez SQLExpress, le nom de votre serveur doit être le suivant ComputerName \ SQLExpress. Toutefois, pour SQLDeveloper, vous ne devez pas redresser SQLDeveloper après votre ComputerName.

Asim Okby
la source
0

Après avoir suivi toutes les étapes mentionnées ici , s'il ne se connecte toujours pas, essayez d'ajouter le DNS avec l'adresse IP dans le fichier hosts dans le dossier etc. L'ajout d'une adresse IP au lieu d'un nom DNS dans la chaîne de connexion devrait être une solution temporaire pour vérifier si la connexion fonctionne réellement.

user3307830
la source
0

J'ai essayé d'utiliser l'adresse IP locale pour me connecter ainsi qu'une adresse publique. J'ai essayé:

Oui, le site peut communiquer avec le serveur Canaux nommés / TCP est activé. Les connexions à distance sont autorisées. Le pare-feu Windows est désactivé. Création d'une exception pour le port 1433 dans le pare-feu Windows. Tout activé dans SQL Server Configuration Manager.

je me suis assuré et j'ai également fait ce qui précède et je veux juste partager que le DOUBLE BACKSLASH

oBuilder.DataSource = "SPECIFICPCNAME \ SQLEXPRESS";

L'utilisation d'un SEUL BACKSLASH a entraîné une erreur de construction, c'est-à-dire: Erreur 1 Séquence d'échappement non reconnue

J'espère que cela aidera le prochain gars - j'ai sacrifié le dîner, le goûter de minuit et les temps forts de la NBA pour résoudre ce problème (honte)

Merci à [Tamizh venthan] ^ _ ^

Ronan Masangcay
la source
0

Activez TCP / Ip, Piped Protocol en accédant à Gestion de l'ordinateur -> SQL et services, assurez-vous que le service est activé. Enbalez le port sur le pare-feu. Essayez de vous connecter via l'invite de commande -> en tant qu'administrateur; Enfin, le nom d'utilisateur doit être (local) \ SQLEXPRESS. J'espère que cela t'aides.

VaishB
la source
0

Ouvrez le Gestionnaire de configuration SQL Server

  1. Sélectionnez Services SQL Server à droite.
  2. Trouvez votre serveur par la droite et accédez à ses propriétés (avec un clic droit)
  3. Changez la méthode de connexion au système local.

entrez la description de l'image ici

entrez la description de l'image ici

zapoo
la source
0

J'ai eu le même problème et j'ai résolu le problème en désactivant mon pare-feu (ESET).

La première étape pour résoudre ce problème devrait être d'essayer d'envoyer une requête ping à votre propre ordinateur à partir d'un autre ordinateur. Si vous avez un pare-feu activé, vous ne pourrez peut-être pas vous pinguer. J'ai essayé de cingler mon propre PC, puis le ping a échoué (je n'ai pas reçu de réponse du serveur)

Uğur Gümüşhan
la source
0

J'ai suggéré ci-dessous les étapes pour résoudre votre problème Comment puis-je corriger l'erreur "Fournisseur de tuyaux nommé, erreur 40 - Impossible d'ouvrir une connexion à" SQL Server "

  1. Vérifiez le bon fonctionnement des services SQL Server Services ou non.
  2. Vérifiez également le bon fonctionnement de SQL Server (MSSQLSERVER) .
  3. Vérifiez également le bon fonctionnement du navigateur SQL Server .
  4. Supprimer tous les alias précédents , créez maintenant de nouveaux alias selon vos besoins.
  5. Vérifiez maintenant le fonctionnement du port 1433 par défaut de SQL Server
  6. Cliquez ensuite sur Protocoles client dans l'instance, puis cliquez sur TCP / IP , cliquez maintenant sur le clic droit de la souris, ouvrez la propriété, ici vous pouvez vous assurer que votre port par défaut SQL 1433 fonctionne correctement .
  7. Ouvrez votre SQL Server Management Studio , puis faites un clic droit, cliquez sur l' option " Propriété " puis cliquez sur l' onglet Connexions , puis enfin cochez Autoriser les connexions à distance à ce serveur .
  8. Vérifiez le bon fonctionnement de votre hôte IP Ping .
Anjan Kant
la source
0

J'essayais d'ajouter une nouvelle connexion dans VS2015. Aucune des suggestions ici n'a fonctionné. Suspectant une sorte de bogue dans l'assistant, d'autant plus que SSMS était capable de se connecter très bien, j'ai décidé d'essayer de le tromper. Ça a marché!

  1. Au lieu d'ajouter la connexion, utilisez «Créer une nouvelle base de données SQL Server». Entrez le nom de votre serveur et un nom aléatoire pour le nouveau DB, par exemple "test".

  2. En supposant que cela réussit, ouvrez l'Explorateur de serveurs dans VS, recherchez la connexion dans Connexions de données, cliquez dessus avec le bouton droit et sélectionnez Modifier la connexion.

  3. Remplacez «test» (à partir de l'étape 1) par le nom de la base de données existante à laquelle vous souhaitez vous connecter. Cliquez sur "Tester la connexion". Cette fois, ça devrait marcher!

  4. Supprimez la base de données temporaire que vous avez créée à l'étape 1.

Roman Starkov
la source
0

J'ai encore une solution, je pense. J'ai récemment changé le nom de mon ordinateur, donc je ne pouvais toujours pas me connecter après avoir essayé toutes les méthodes ci-dessus. J'ai changé le nom du serveur. Nom du serveur => (recherchez plus) => sous le moteur de base de données, un nouveau serveur a été trouvé comme le nouveau nom des ordinateurs. Cela a fonctionné, et la vie est à nouveau belle.

tauqr_ahmd
la source
0

J'ai lutté pendant des siècles sur celui-ci avant de réaliser mon erreur - j'avais utilisé des virgules au lieu de points-virgules dans la chaîne de connexion

Andy
la source
0

J'ai eu ce problème mais aucune des suggestions ci-dessus ne l'a résolu.

Je voyais ce problème lorsque j'ai déployé mon site Web sur IIS. Le correctif consistait à accéder aux paramètres avancés par rapport au pool d'applications par défaut et à modifier la propriété d'identité par défaut en Administrator.

Ste Brown
la source
0

Pour moi, c'était un problème de pare-feu.

Vous devez d'abord ajouter le port (tel que 1444 et peut-être 1434) mais aussi

C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe

et

%ProgramFiles%\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\Binn\SQLAGENT.EXE

La deuxième fois que j'ai eu ce problème, c'est lorsque je suis revenu au pare-feu, les chemins n'étaient pas corrects et j'avais besoin de mettre à jour le formulaire 12 à 13! Un simple clic sur parcourir dans l'onglet Programmes et services a permis de réaliser cela.

Enfin, essayez d'exécuter la commande

EXEC xp_readerrorlog 0,1, "n'a pas pu enregistrer le nom principal du service", Null

Pour moi, il a renvoyé la raison de l'erreur

Dave
la source
0

J'ai essayé à peu près tout sur cette page, mais j'avais des problèmes sous-jacents qui devaient en fait être résolus. Je n'ai pas pu faire certaines choses comme ouvrir SQL Server Configuration Manager, qui a fini par être des fichiers de fournisseur WMI corrompus / manquants.

Il existe de nombreuses façons fastidieuses de résoudre ces problèmes en fonction de ce que j'ai lu, mais l'outil de tweaking.com a pu supprimer et remplacer / réparer mes fichiers de fournisseur WMI (Windows Management Instrumentation).

J'avais l'habitude de faire des réparations d'ordinateurs et dans l'ensemble, l'outil tweaking.com m'a vraiment impressionné, et cela a été suggéré par l'une des pages du forum d'erreur WMI auxquelles je suis allé.

Après avoir résolu ce problème, j'ai pu me connecter à ma base de données SQL, à la fois localement et à distance.

J'espère que cela aide quelqu'un.

Elon Zito
la source