检查是否安装了SQL服务器(任何版本)?

我需要查找是否在计算机上安装了SQL Server。 它可以是任何版本的SQL服务器(7,2005,8,sql express等)。 我们在编写安装程序时需要知道此信息,并且需要向用户显示如果未找到SQL服务器,则无法继续安装。

我见过使用注册表,wmi,SMO或只是连接到SQL服务器实例的版本(虽然在这里没有帮助,因为我们不知道服务器名称)。

我们正在使用Wix安装程序。

这样做的正确方法是什么?

JD

列出网络上所有SQL Server的简单方法是:

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("****************************************"); } 

取自这篇博客文章 。

看看这个问题: 如何确定已安装的SQL Server实例及其版本?

其中一个答案列出了您可以检查以确定已安装的SQL Server版本的注册表项。

或者,如果需要在本地网络中查找任何SQL Server,请查看此代码项目文章: http : //www.codeproject.com/KB/database/locate_sql_servers.aspx

我需要类似的东西,发现一个本地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; } 

另一个简单的替代方法是在安装程序中使用以下命令行:

 sc queryex type= service | find "MSSQL" 

上面的命令只列出包含MSSQL部分的所有服务,列出命名和默认的SQL Server实例。 如果未找到任何内容,则此命令不返回任 它返回如下内容:

 SERVICE_NAME: MSSQL$SQLEXPRESS 

希望这可以帮助。