2010-08-28 78 views
7

我的C#应用​​程序使用SMO对用户选择的SQL Server实例执行各种操作。特别是它改变了认证模式:使用SMO重新启动SQL Server实例

ServerConnection conn = new ServerConnection(connection); 
Server server = new Server(conn); 

server.Settings.LoginMode = ServerLoginMode.Mixed; 

更改登录后应该重新启动更多的实例。但是,我无法在SMO中找到重新启动选定实例的方法。

我试过谷歌这个,但只发现了一堆枚举正在运行的服务和比较他们的名字与SQL服务器服务名称的示例。我不喜欢这种方式,因为它很容易出错,并且依赖于Microsoft当前命名SQL Server实例的方式。

有什么办法可以在SMO中重新启动所选实例吗?

回答

4

添加对System.ServiceProcess的引用。

using System.ServiceProcess; 

public static void RestartService(string sqlInstanceName) { 
    if (string.IsNullOrEmpty(sqlInstanceName)) { 
     throw new ArgumentNullException("sqlInstanceName"); 
    } 

    const string DefaultInstanceName = "MSSQLSERVER"; 
    const string ServicePrefix = "MSSQL$"; 
    const string InstanceNameSeparator = "\\"; 

    string serviceName = string.Empty; 
    string server = sqlInstanceName; 
    string instance = DefaultInstanceName; 

    if (server.Contains(InstanceNameSeparator)) { 
     int pos = server.IndexOf(InstanceNameSeparator); 
     server = server.Substring(0, pos); 
     instance = sqlInstanceName.Substring(pos + 1); 
    } 

    serviceName = ServicePrefix + instance; 
    ServiceController sc = new ServiceController(serviceName, server); 
    sc.Stop(); 
    sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(30)); 
    sc.Start(); 
    sc.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(30)); 
}