2010-08-28 12 views
7

Meine C# -Anwendung verwendet SMO, um verschiedene Aktionen mit der SQL Server-Instanz auszuführen, die von einem Benutzer ausgewählt wurde. Insbesondere wird der Authentifizierungsmodus geändert:SQL Server-Instanz mit SMO neu starten

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

server.Settings.LoginMode = ServerLoginMode.Mixed; 

Nach dem Ändern der Anmeldung sollte die Instanz erneut gestartet werden. Ich kann jedoch in SMO keine Möglichkeit finden, die ausgewählte Instanz neu zu starten.

Ich habe versucht, dies zu googlen, fand aber nur eine Reihe von Beispielen, die laufende Dienste aufzählten und ihre Namen mit dem Namen des SQL Server-Dienstes verglichen. Ich mochte diesen Weg nicht, da er fehleranfällig ist und auf der Art und Weise beruht, wie Microsoft SQL Server-Instanzen benennt.

Gibt es eine Möglichkeit, gewählte Instanz in SMO neu zu starten?

Antwort

4

Eine Referenz auf System.ServiceProcess hinzufügen.

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)); 
} 
0

Sie müssen manuell neu starten! Zuerst müssen Sie den Dienst stoppen und warten, bis der Dienst seinen Status ändert und Sie müssen den Dienst starten und warten, bis der Dienst seinen Status ändert.

MSDN-Website hat eine Probe für diesen Vorgang: http://msdn.microsoft.com/en-us/library/ms162139(v=SQL.90).aspx