"Maar waarom...?"
Voor degenen die geïnteresseerd zijn in waarom SQL Server Management Studio (SSMS) kan verbinding maken met servername\instance
terwijl andere applicaties (zoals onze pyodbc-apps) dat niet kunnen, komt dat omdat SSMS een MRU-lijst (meest recent gebruikt) met poortnummers bijhoudt in het Windows-register op
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
Elke MRU-invoer (registerwaarde) ziet er ongeveer zo uit:
Name: PANORAMA\SQLEXPRESS
Type: REG_SZ
Data: -1006030326:tcp:PANORAMA,52865
Zodra SSMS met succes verbinding heeft gemaakt op instantienaam via de SQL Browser-service op de externe computer, kan deze verbinding blijven maken op instantienaam, zelfs als de SQL-browser niet langer actief is op de externe computer, op voorwaarde dat het poortnummer niet is gewijzigd. Apps die deze MRU-lijst niet gebruiken (zoals onze pyodbc-app) moeten de SQL Browser-service op de externe computer laten draaien elke keer dat ze verbinding willen maken op instantienaam.
Het meest voorkomende scenario:
- Ik wil verbinding maken met
YOUR-PC\SQLEXPRESS
. Ik probeer dat te doen vanuit SSMS opMY-PC
, maar het werkt niet omdat de SQL-browser is geïnstalleerd met "Start Mode" ingesteld op "Manual" opYOUR-PC
. - Ik vraag je om de SQL Browser-service te starten op
YOUR-PC
, en u houdt zich eraan, maar u start gewoon de service en vergeet de instelling "Startmodus" te wijzigen in "Automatisch". - Ik kan verbinding maken via SSMS (waarbij de
YOUR-PC\SQLEXPRESS
poort in de MRU). Mijn python-app kan ook verbinding maken. - Na de volgende keer
YOUR-PC
opnieuw wordt opgestart, kan ik verbinding maken via SSMS (via de MRU) maar mijn python-app kan dat niet (omdat de SQL Browser-service niet langer draait opYOUR-PC
).