检查是否安装了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
希望这可以帮助。