"Mais pourquoi... ?"
Pour ceux qui s'intéressent à pourquoi SQL Server Management Studio (SSMS) peut se connecter à servername\instance
alors que d'autres applications (comme nos applications pyodbc) ne le peuvent pas, c'est parce que SSMS conserve une liste MRU (les plus récemment utilisés) des numéros de port dans le registre Windows à
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
Chaque entrée MRU (valeur de registre) ressemble à ceci :
Name: PANORAMA\SQLEXPRESS
Type: REG_SZ
Data: -1006030326:tcp:PANORAMA,52865
Une fois que SSMS s'est connecté avec succès par nom d'instance via le service SQL Browser sur la machine distante, il peut continuer à se connecter par nom d'instance même si le navigateur SQL n'est plus en cours d'exécution sur la machine distante, à condition que le numéro de port n'ait pas changé. Les applications qui n'utilisent pas cette liste MRU (comme notre application pyodbc) doivent avoir le service SQL Browser en cours d'exécution sur la machine distante chaque fois qu'elles souhaitent se connecter par nom d'instance.
Le scénario le plus courant :
- Je veux me connecter à
YOUR-PC\SQLEXPRESS
. J'essaie de le faire depuis SSMS surMY-PC
, mais cela ne fonctionne pas car le navigateur SQL a été installé avec le "Mode de démarrage" défini sur "Manuel" surYOUR-PC
. - Je vous demande de démarrer le service SQL Browser sur
YOUR-PC
, et vous vous conformez gentiment, mais vous venez de démarrer le service et oubliez de changer le paramètre "Mode de démarrage" sur "Automatique". - Je peux me connecter via SSMS (qui met en cache le
YOUR-PC\SQLEXPRESS
port dans le MRU). Mon application Python peut également se connecter. - Après la prochaine fois
YOUR-PC
redémarre, je peux me connecter via SSMS (via le MRU) mais mon application python ne peut pas (car le service SQL Browser ne fonctionne plus surYOUR-PC
).