"Mas por que...?"
Para os interessados em por que O SQL Server Management Studio (SSMS) pode se conectar a
servername\instance
enquanto outros aplicativos (como nossos aplicativos pyodbc) não podem, é porque o SSMS mantém uma lista MRU (mais recentemente usada) de números de porta no registro do Windows em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
Cada entrada MRU (valor de registro) se parece com isto:
Name: PANORAMA\SQLEXPRESS
Type: REG_SZ
Data: -1006030326:tcp:PANORAMA,52865
Depois que o SSMS for conectado com sucesso pelo nome da instância por meio do serviço SQL Browser na máquina remota, ele poderá continuar a se conectar pelo nome da instância mesmo se o SQL Browser não estiver mais em execução na máquina remota, desde que o número da porta não tenha sido alterado. Os aplicativos que não usam essa lista MRU (como nosso aplicativo pyodbc) precisam ter o serviço SQL Browser em execução na máquina remota sempre que quiserem se conectar pelo nome da instância.
O cenário mais comum:
- Quero me conectar a
YOUR-PC\SQLEXPRESS
. Eu tento fazer isso do SSMS emMY-PC
, mas não funciona porque o SQL Browser foi instalado com "Start Mode" definido como "Manual" emYOUR-PC
. - Peço que você inicie o serviço SQL Browser em
YOUR-PC
, e você gentilmente concorda, mas apenas inicia o serviço e esquece de alterar a configuração "Modo de início" para "Automático". - Consigo me conectar via SSMS (que armazena em cache o
YOUR-PC\SQLEXPRESS
porta na MRU). Meu aplicativo python também pode se conectar. - Após a próxima vez
YOUR-PC
reinicia, posso me conectar via SSMS (via MRU), mas meu aplicativo python não pode (porque o serviço SQL Browser não está mais em execução emYOUR-PC
).