當使用MS JDBC驅動程序連接到端口TCP/58300
運行的SQL Server實例,我意識到,所有這些連接字符串的工作:SQL Server客戶端如何知道如何連接到實例?
jdbc:sqlserver://MY_SERVER\MY_INSTANCE
jdbc:sqlserver://MY_SERVER\MY_INSTANCE:58300
jdbc:sqlserver://MY_SERVER:58300
我想,第一個直接連接到SQL Server的默認端口,即TCP/1433
。然後,從那裏獲得有關如何連接到實例的指導,建立到正確端口的新連接。第二個直接連接到正確的端口和實例名稱是不是真的需要,這就是爲什麼最後一個也工作。
然而,此連接字符串不起作用:
jdbc:sqlserver://MY_SERVER\MY_INSTANCE:1433
我有一個登錄失敗的錯誤(顯然是因爲我無法連接到該實例運行在端口TCP/1433
)。
當使用jTDS JDBC Driver時,當你有一個實例名時,端口似乎並不重要。即使是隨機的,無效的港口工程,以及:
jdbc:jtds:sqlserver://MY_SERVER:1433;instance=MY_INSTANCE
jdbc:jtds:sqlserver://MY_SERVER:58300;instance=MY_INSTANCE
jdbc:jtds:sqlserver://MY_SERVER:12345;instance=MY_INSTANCE
jdbc:jtds:sqlserver://MY_SERVER:9999999;instance=MY_INSTANCE
所以問題是:
- SQL服務器如何知道如何連接到特定的實例? (假設你只提供一個名稱,而不是一個端口號)
- 如果我正確地猜測它連接到默認端口,爲什麼當我們在連接字符串中設置默認端口號時,MS JDBC驅動程序不起作用?也許MS JDBC驅動程序在提供端口號時忽略instanceName?
很好的答案!如果你在開始時引用SQL Server Browser是一個服務,它是SQL Server的一部分,它在端口'UDP/1434'上運行,那麼它會得到改進(我讀了你的整個答案,問自己「他在談論什麼瀏覽器? 「)。但是你提供了找到這些信息的方向。謝謝! –