"Men varför ...?"
För dem som är intresserade av varför SQL Server Management Studio (SSMS) kan ansluta till servername\instance
medan andra applikationer (som våra pyodbc-appar) inte kan, beror det på att SSMS håller en MRU-lista (Most Recently Used) över portnummer i Windows-registret på
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
Varje MRU-post (registervärde) ser ut ungefär så här:
Name: PANORAMA\SQLEXPRESS
Type: REG_SZ
Data: -1006030326:tcp:PANORAMA,52865
När SSMS framgångsrikt har anslutit med instansnamn via SQL Browser-tjänsten på fjärrdatorn, kan den fortsätta att ansluta med instansnamn även om SQL Browser inte längre körs på fjärrdatorn, förutsatt att portnumret inte har ändrats. Appar som inte använder den här MRU-listan (som vår pyodbc-app) måste ha SQL Browser-tjänsten körd på fjärrdatorn varje gång de vill ansluta med instansnamn.
Det vanligaste scenariot:
- Jag vill ansluta till
YOUR-PC\SQLEXPRESS
. Jag försöker göra det från SSMS påMY-PC
, men det fungerar inte eftersom SQL-webbläsaren installerades med "Startläge" inställt på "Manuell" påYOUR-PC
. - Jag ber dig att starta SQL Browser-tjänsten på
YOUR-PC
, och du är vänlig, men du startar bara tjänsten och glömmer att ändra inställningen "Startläge" till "Automatisk". - Jag kan ansluta via SSMS (som cachar
YOUR-PC\SQLEXPRESS
port i MRU). Min python-app kan också ansluta. - Efter nästa gång
YOUR-PC
startar om, jag kan ansluta via SSMS (via MRU) men min python-app kan inte (eftersom SQL Browser-tjänsten inte längre körs påYOUR-PC
).