2010-03-04 63 views
19

我需要找到SQL服務器是否安裝在一臺機器上。它可以是任何版本的SQL服務器(7,2005,8,sql express等)。在編寫安裝程序時,我們需要知道這些信息,並且需要向用戶顯示如果尚未找到SQL Server,則安裝無法繼續。檢查是否安裝了SQL Server(任何版本)?

我已經看到了使用註冊表,wmi,SMO或乾脆連接到SQL服務器實例的版本(雖然在這裏沒有幫助,因爲我們不知道服務器名稱)。

我們正在使用Wix安裝程序。

這樣做的正確方法是什麼?

JD

+0

您的安裝例程是否必須與SQL服務器在同一臺服務器上運行? – BIDeveloper 2010-03-04 16:52:12

回答

16

一個簡單的方法來列出網絡上的所有SQL服務器是這樣的:

using System.Data; 
using System.Data.Sql; 
using System; 

... 

SqlDataSourceEnumerator sqldatasourceenumerator1 = SqlDataSourceEnumerator.Instance; 
DataTable datatable1 = sqldatasourceenumerator1.GetDataSources(); 
foreach (DataRow row in datatable1.Rows) 
{ 
    Console.WriteLine("****************************************"); 
    Console.WriteLine("Server Name:"+row["ServerName"]); 
    Console.WriteLine("Instance Name:"+row["InstanceName"]); 
    Console.WriteLine("Is Clustered:"+row["IsClustered"]); 
    Console.WriteLine("Version:"+row["Version"]); 
    Console.WriteLine("****************************************"); 
} 

來自this blog post

+0

@Martin:謝謝,那正是我需要的。我現在只需要獲取本地計算機的機器名稱,只需檢查它是否在列表中。這樣我會知道本地機器是否安裝了sql實例。 – 2010-03-04 17:10:40

+5

@Martin這不需要SQL瀏覽器服務正在運行嗎? – Thomas 2010-03-14 17:32:42

+0

我有一臺機器,只安裝* SQL Server Analysis Services服務器作爲獨立服務安裝。該盒上有* no * SQL服務器引擎/實例。此代碼是否僅將SQL Server分析服務服務器視爲SQL Server數據源? – RBT 2017-06-16 12:52:11

2

看一看這個問題:How can I determine installed SQL Server instances and their versions?

答案之一列出的註冊表項,你可以檢查以確定已安裝的SQL Server版本(S)。

或查看此CodeProject上的文章,如果你需要找到本地網絡中的任何SQL服務器:http://www.codeproject.com/KB/database/locate_sql_servers.aspx

+0

我們已經看到卸載已經離開註冊表項的sql server。另外,從以前的文章來看,不能保證註冊表條目對於不同版本是相同的。 – 2010-03-04 17:12:03

2

我需要類似的東西來發現一個本地SQLServer實例來執行自動化測試。

的SmoApplication很適合這個要求 - 我的代碼如下所示:

public static string GetNameOfFirstAvailableSQLServerInstance() 
{ 
    // Only search local instances - pass true to EnumAvailableSqlServers 
    DataTable dataTable = SmoApplication.EnumAvailableSqlServers(true); 
    DataRow firstRow = dataTable.Rows[0]; 
    string instanceName = (string)firstRow["Name"]; 
    return instanceName; 
} 
2

另一種簡單的替代方法是使用安裝程序中的以下命令行:

sc queryex type= service | find "MSSQL" 

上面的命令只需列出包含MSSQL部分的所有服務,列出已命名和默認的SQL Server實例。如果找不到任何東西,此命令將不返回任何內容它返回像這樣:

SERVICE_NAME: MSSQL$SQLEXPRESS 

希望這有助於。

相關問題