"Nhưng tại sao ...?"
Dành cho những người quan tâm đến tại sao SQL Server Management Studio (SSMS) có thể kết nối với servername\instance
trong khi các ứng dụng khác (như ứng dụng pyodbc của chúng tôi) thì không thể, đó là do SSMS giữ danh sách số cổng MRU (Được sử dụng gần đây nhất) trong sổ đăng ký Windows tại
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
Mỗi mục nhập MRU (giá trị đăng ký) trông giống như sau:
Name: PANORAMA\SQLEXPRESS
Type: REG_SZ
Data: -1006030326:tcp:PANORAMA,52865
Khi SSMS đã kết nối thành công bằng tên phiên bản thông qua dịch vụ Trình duyệt SQL trên máy từ xa, nó có thể tiếp tục kết nối bằng tên phiên bản ngay cả khi Trình duyệt SQL không còn chạy trên máy từ xa, miễn là số cổng không thay đổi. Các ứng dụng không sử dụng danh sách MRU này (như ứng dụng pyodbc của chúng tôi) cần phải có dịch vụ Trình duyệt SQL chạy trên máy từ xa mỗi khi chúng muốn kết nối bằng tên phiên bản.
Tình huống phổ biến nhất:
- Tôi muốn kết nối với
YOUR-PC\SQLEXPRESS
. Tôi thử làm điều đó từ SSMS trênMY-PC
, nhưng nó không hoạt động vì Trình duyệt SQL đã được cài đặt với "Chế độ khởi động" được đặt thành "Thủ công" trênYOUR-PC
. - Tôi yêu cầu bạn khởi động dịch vụ Trình duyệt SQL trên
YOUR-PC
và bạn vui lòng tuân thủ, nhưng bạn chỉ khởi động dịch vụ và quên thay đổi cài đặt "Chế độ bắt đầu" thành "Tự động". - Tôi có thể kết nối qua SSMS (SSMS lưu trữ trong bộ nhớ cache của
YOUR-PC\SQLEXPRESS
cổng trong MRU). Ứng dụng python của tôi cũng có thể kết nối. - Sau lần tiếp theo
YOUR-PC
khởi động lại, tôi có thể kết nối qua SSMS (qua MRU) nhưng ứng dụng python của tôi không thể (vì dịch vụ Trình duyệt SQL không còn chạy trênYOUR-PC
).