2012-07-26 103 views
1

我正在創建使用SQL Server 2008的Windows窗體應用程序。在我有的安裝項目中,如果需要,請在目標機器上檢查並安裝SQL Server 2008。我需要的是一種獲得SQL Server 2008的方法 - 以及2008年的唯一實例名稱。如何查找包含默認實例的SQL Server 2008實例

現在我正在使用SmoApplication.EnumAvailableSqlServers函數並檢查返回的版本,但我發現它不顯示默認實例。這對我來說是有問題的,因爲如果在我的安裝程序在目標機器上安裝SQL Server 2008之後運行此程序,則沒有可用的命名實例 - 只有默認實例。

我不想只是盲目地檢查,看看傳統的MSSQLSERVER默認實例工作的原因有兩個:

  1. 這可能是從SQL Server 2008中遺留下來的默認實例安裝,從而贏得無法訪問我的應用程序使用的數據庫。跳過它然後檢查其他命名實例很可能不會返回任何內容。

  2. 它也可能是SQL Server 2012的新版本的默認實例。雖然此實例能夠訪問我的數據庫,但我的經驗是,它隨後將數據庫「升級」到新的SQL Server版本,並且早期版本將無法訪問它。由於我的應用程序旨在與SQL Server 2008協同工作,這給我帶來了一些問題。

,所以我需要使用任何SQL Server 2008命名實例或默認實例,如果它是2008年

有沒有辦法做到這一點?

+0

我想我有一個使用SqlDataSourceEnumerator的解決方案。通過使用此實例成員的GetDataSources()方法,它看起來像默認實例顯示,但只給出默認實例運行的機器的名稱。沒有提供版本信息,這給我造成了一個問題。 – MWinstead 2012-07-27 19:34:54

+0

看看我的答案,試試吧! – MAXE 2012-08-28 12:11:34

回答

2

使用應該使用類System.Data.Sql命名空間的SqlDataSourceEnumerator(組裝System.Data.dll),這樣一來:

SqlDataSourceEnumerator sdsEnumerator = SqlDataSourceEnumerator.Instance; 

DataTable sqlServerInstances = sdsEnumerator.GetDataSources(); 

這些類不需要有安裝了SQL Server,但可以檢索有關任何SQL Server實例的信息。提醒這一點:

由於使用SqlDataSourceEnumerator在網絡上找到數據源的機制的性質,該方法不會總是返回可用的服務器的完整列表,該列表可能不如果您打算使用此函數讓用戶從列表中選擇服務器,請確保始終提供一個選項,以便鍵入不在列表中的名稱,以防服務器枚舉出現不會返回所有可用的服務器,此外,此方法可能需要大量時間才能執行,因此在性能至關重要時請謹慎操作。

方法GetDataSource是你所需要的:here the documentation,返回你所需要的所有信息一DataTable

服務器名稱 的服務器的名稱。

InstanceName 服務器實例的名稱。如果服務器作爲默認實例運行,則爲空白。

IsClustered 指示服務器是否是羣集的一部分。

版本 版本的服務器(8.00.x用於SQL Server 2000和9.00.x爲SQL Server 2005,10.00.x爲SQL Server 2008,10.50.x爲SQL Server 2008 R2和11.00.x對於SQL Server 2012)。

你可以找到類SqlDataSourceEnumeratorhere的完整參考。

相關問題