"Men hvorfor ...?"
For dem, der er interesseret i hvorfor SQL Server Management Studio (SSMS) kan oprette forbindelse til servername\instance
mens andre applikationer (såsom vores pyodbc-apps) ikke kan, er det fordi SSMS holder en MRU-liste (mest nyligt brugt) over portnumre i Windows-registreringsdatabasen på
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
Hver MRU-post (registreringsværdi) ser nogenlunde sådan ud:
Name: PANORAMA\SQLEXPRESS
Type: REG_SZ
Data: -1006030326:tcp:PANORAMA,52865
Når SSMS har oprettet forbindelse med instansnavn via SQL Browser-tjenesten på den eksterne maskine, kan den fortsætte med at oprette forbindelse ved instansnavn, selvom SQL-browseren ikke længere kører på fjernmaskinen, forudsat at portnummeret ikke er ændret. Apps, der ikke bruger denne MRU-liste (som vores pyodbc-app), skal have SQL Browser-tjenesten kørende på den eksterne maskine, hver gang de vil oprette forbindelse efter instansnavn.
Det mest almindelige scenario:
- Jeg vil oprette forbindelse til
YOUR-PC\SQLEXPRESS
. Jeg prøver at gøre det fra SSMS påMY-PC
, men det virker ikke, fordi SQL-browseren blev installeret med "Starttilstand" sat til "Manuel" påYOUR-PC
. - Jeg beder dig starte SQL Browser-tjenesten på
YOUR-PC
, og du er venlig at overholde, men du starter bare tjenesten og glemmer at ændre indstillingen "Starttilstand" til "Automatisk". - Jeg er i stand til at oprette forbindelse via SSMS (som cacher
YOUR-PC\SQLEXPRESS
port i MRU'en). Min python-app kan også oprette forbindelse. - Efter næste gang
YOUR-PC
genstarter, jeg kan oprette forbindelse via SSMS (via MRU), men min python-app kan ikke (fordi SQL Browser-tjenesten ikke længere kører påYOUR-PC
).