C# 检查是否安装了SQL server(任何版本)?

C# 检查是否安装了SQL server(任何版本)?,c#,sql-server,C#,Sql Server,我需要确定SQL server是否安装在计算机上。它可以是SQL server的任何版本(7、2005、8、SQL express等)。在编写安装程序时,我们需要了解这些信息,并且需要向用户显示,如果未找到SQL server,安装将无法继续 我见过使用注册表、wmi、SMO或仅连接到SQL server实例的版本(尽管在这里没有帮助,因为我们不知道服务器名称) 我们正在使用Wix安装程序 正确的方法是什么 JD看看这个问题: 其中一个答案列出了可以检查以确定已安装SQL Server版本的注册

我需要确定SQL server是否安装在计算机上。它可以是SQL server的任何版本(7、2005、8、SQL express等)。在编写安装程序时,我们需要了解这些信息,并且需要向用户显示,如果未找到SQL server,安装将无法继续

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

我们正在使用Wix安装程序

正确的方法是什么


JD

看看这个问题:

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


如果您需要在本地网络中查找任何SQL Server,请参阅此codeproject文章:

列出网络上所有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("****************************************");
}

摘自。

我需要类似的东西来发现一个本地SQLServer实例以对其执行自动测试

SMO应用程序非常适合此要求-我的代码如下所示:

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;
}
SERVICE_NAME: MSSQL$SQLEXPRESS

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

sc queryex type= service | find "MSSQL"
上面的命令只是列出了包含MSSQL部分的所有服务,列出了命名的和默认的SQL Server实例。如果未找到任何内容,此命令将不返回任何内容。它返回如下内容:

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;
}
SERVICE_NAME: MSSQL$SQLEXPRESS
希望这有帮助。

另一个有帮助的答案是,最近(10年前):


你的安装程序必须与SQL server在同一台服务器上运行吗?@Martin:谢谢,这正是我需要的。我现在需要获取本地机器的机器名,并检查它是否在列表中。这样,我就知道本地计算机是否安装了sql实例。@Martin这不要求sql浏览器服务正在运行吗?我有一台计算机,其中只有sql Server Analysis services Server作为独立服务安装。该框上没有SQL Server引擎/实例。此代码是否也将SQLServer Analysis Service Server作为SQL Server数据源来考虑?我们已经看到了SQLServer的安装,这些SQL Server都有注册表项。另外,从上一篇文章来看,不能保证不同版本的注册表项是相同的。