2010-08-28 40 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)); 
}