2010-08-28 11 views
7

La aplicación My C# usa SMO para hacer varias cosas con la instancia de SQL Server elegida por un usuario. Particularmente, cambia el modo de autenticación:Reinicie la instancia de SQL Server utilizando SMO

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

server.Settings.LoginMode = ServerLoginMode.Mixed; 

Después de cambiar el inicio de sesión, se debe reiniciar más instancia. Sin embargo, no puedo encontrar ninguna forma en SMO para reiniciar la instancia seleccionada.

He intentado googlear esto, pero solo encontré un grupo de ejemplos enumerando los servicios en ejecución y comparando sus nombres con el nombre del servicio del servidor SQL. No me gustó de esta manera, ya que es propenso a errores y se basa en la forma en que Microsoft actualmente nombra instancias de SQL Server.

¿Hay alguna forma de reiniciar la instancia elegida en SMO?

Respuesta

4

Agregue una referencia a 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)); 
} 
0

¡Debe reiniciar manualmente! primero tiene que detener el servicio y esperar a que el servicio cambie su estado y usted debe comenzar el servicio y nuevamente esperar a que el servicio cambie su estado.

sitio web de MSDN tiene una muestra para esta operación: http://msdn.microsoft.com/en-us/library/ms162139(v=SQL.90).aspx

Cuestiones relacionadas