2014-02-12 19 views
2

我的本地機器上有兩個SQL Server實例。他們都聽取不同的端口。我安裝的第一個實例運行在默認端口1433上。我已經設置了另一個端口來監聽端口1434.當在SQL Server連接字符串中未指定端口號時會發生什麼情況?

我的應用程序使用了一些我們在這裏生成連接字符串的舊共享代碼。所以直到現在我還不知道那裏發生了什麼。由於新的要求,我發現自己需要檢查連接到SQL Server的連接字符串。

我發現,連接字符串被建立連接到每個SQL實例不包括網絡庫,也沒有包括端口號作爲數據源的一部分。數據源剛剛設置爲<Server Name>/<Instance Name>。我在MS文檔中發現,如果網絡庫不包含在內,那麼它將被視爲(local),但它並不能解釋如何處理(local)

所以我的問題是爲什麼這種格式的連接字符串能夠連接到在非默認端口上運行的SQL Server實例?如果這些實例位於本地計算機或本地網絡上,這隻會起作用嗎?如果服務器是遠程的,我可以不帶端口<ip>/<sql instance>嗎?

我只是需要一些清晰的說明這是如何工作的,什麼時候需要端口號,什麼時候是可選的,因爲我試圖讓我的連接用戶界面儘可能簡單。

回答

0

我在本地機器上有兩個SQL Server實例。他們都聽取不同的端口。我安裝的第一個實例運行在默認端口1433上。我已經設置了另一個端口來監聽端口1434.

只是出於好奇,爲什麼不把它們設置爲命名實例都運行默認的1433?

至於它的工作原理,如果您在開始菜單中搜索SQL配置,則會發現類似於此的屏幕。

enter image description here

Sql Server的支持許多不同的連接方式。 TCP/IP是一種方式(即IP地址和端口),但如果您在本地計算機上,它也支持共享內存連接。也就是說,如果你的SQL Server可執行,並且管理工作室/客戶端也在同一臺機器上。

在猜測時我會說它默認爲共享內存,當你指定本地,因此你不需要指定端口。

您可以通過在上述配置中暫時禁用共享內存來測試此功能,並查看您的(local)\InstanceName是否停止工作。

+0

如果我將tcp/ip端口設置爲1433並重新啓動這兩個服務。第二項服務無法啓動。我的印象是你只能有一個實例監聽任何特定的端口。 – Jesse

2

有這樣所謂的 「SQL Server Browser服務」 一件事:

http://technet.microsoft.com/en-us/library/ms181087(v=sql.105).aspx

其目的是爲客戶提供有關SQL Server實例,端口信息。它實際上偵聽UDP端口1434. 關閉此服務,您仍然可以連接到實例,但需要指定TCP/IP端口。

+0

當我通過SQL Management Studio連接時,此服務似乎沒有效果。在啓用和禁用連接協議時,我會看到更多效果。但是無論瀏覽器是否在運行,我都會連接或得到相同的錯誤。當我有更多時間並且看到會發生什麼時,我會嘗試使用我的應用程序。我以其他方式解決了這個問題,所以這不是重中之重。 – Jesse

相關問題