如何知道c#程序中sql实例的状态

时间:2011-11-04 11:53:27

标签: c# sql-server sql-server-2008-r2

我有一个数据库,其中一个镜像处于高安全模式(目前使用见证服务器,但计划将他带出),此数据库将用于存储由c#程序收集的数据。

我想知道如何在程序中检查所有SQL实例的状态并导致/强制手动故障转移。

是否有任何c#API可以帮助我解决这个问题?

信息我正在使用sql server 2008

编辑:我知道我可以查询sys.database_mirroring但是为此我需要主数据库启动并运行,我想联系每个sql实例并检查它们的状态。

2 个答案:

答案 0 :(得分:2)

使用SQL Server Management Objects (SMO)

  

SQL Server管理对象(SMO)是一组对象,用于编程管理Microsoft SQL Server的所有方面。 SQL Server复制管理对象(RMO)是一组封装SQL Server复制管理的对象。

我之前在托管应用程序中使用过SMO - 是一种享受。


要查找实例的状态,请使用Server对象 - 具有StateStatus属性。

答案 1 :(得分:0)

在玩了一下之后我发现了这个解决方案(我不是,如果这是一个合适的解决方案,那么留下评论plz)

using Microsoft.SqlServer.Management.Smo.Wmi;

ManagedComputer mc = new ManagedComputer("localhost");
foreach (Service svc in mc.Services) {
    if (svc.Name == "MSSQL$SQLEXPRESS"){
        textSTW.Text = svc.ServiceState.ToString();
    }
    if (svc.Name == "MSSQL$TESTSERVER"){
        textST1.Text = svc.ServiceState.ToString();
    }
    if (svc.Name == "MSSQL$TESTSERVER3") {
        textST2.Text = svc.ServiceState.ToString();
    }
}

这样我只是在寻找服务的状态(Running / Stoped)并且速度更快,我错过了什么?