3

在我的.NET應用程序中,我連接到Microsoft SQL Server 2005或2008數據庫。用戶選擇應用程序顯示它的實例,然後應用程序應該對此實例執行一些操作。我從註冊表中獲取實例名稱,HKLM \ Software \ Microsoft \ Microsoft SQL Server \ Instance Names \ SQL。缺省實例的連接字符串,如命名實例

我不知道用戶是否選擇默認實例或命名實例(並且實例名稱註冊表值中沒有此類信息)。然而,爲了連接到任意的情況下,我應該使用

Server=(local) 
在我的ADO.NET連接字符串

Server=MSSQLSERVER\instance_name 

。我可以只使用一個連接字符串模板嗎?我試圖爲我的默認SQL Server 2008實例使用Server = MSSQLSERVER \ MSSQL10.MSSQLSERVER,但連接失敗。

回答

9

如果實例名稱是MSSQLSERVER,則必須使用一個模板像Server=servername。對於所有其他實例名稱,請使用像Server=servername\instancename這樣的模板。您不能顯式指定默認實例名稱。

作爲一個側面說明,你不應該註冊那個峯值。首先,沒有文件記錄,並受到任意和不通知的變化。其次,這是不正確的,因爲註冊表中存在的實例可能沒有運行。第三個錯誤是不正確的,因爲如果SQL瀏覽器服務沒有通告它們,即使運行實例可能也不可連接。

檢測現有實例的推薦和支持方式是使用SQL Browser廣播功能,並且可以通過使用SmoApplication.EnumAvailableSqlServers從客戶端代碼中利用它們。

+0

感謝您的詳細解答。我有2008 Server Express,但我的默認實例不是MSSQLSERVER,而是MSSQL10.MSSQLSERVER。我如何? – Alex 2010-08-10 15:13:48

+0

實例名稱是MSSQLSERVER。您列出的內容不是實例名稱,是實例*鍵*,我不打算解釋這是什麼,因爲您應該再次使用受支持的方式(SMO)。 – 2010-08-10 15:22:33

+0

謝謝,Remus! – Alex 2010-08-10 15:32:00

0

您應該使用Server=servername\instance_nameServer=address\instance_name

+1

這似乎不適用於默認實例。 – Alex 2010-08-10 15:14:23