Перезапустите экземпляр SQL Server, используя SMO - PullRequest
7 голосов
/ 29 августа 2010

Мое приложение C # использует SMO для выполнения различных задач с выбранным пользователем экземпляром SQL Server.В частности, он меняет режим аутентификации:

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

server.Settings.LoginMode = ServerLoginMode.Mixed;

После смены логина необходимо перезапустить еще один экземпляр.Однако в SMO я не могу найти способ перезапустить выбранный экземпляр.

Я пытался найти это в Google, но нашел только несколько примеров, перечисляющих запущенные службы и сравнивающих их имена с именем службы сервера SQL.Мне не понравился этот способ, так как он подвержен ошибкам и основан на том, как Microsoft в настоящее время называет экземпляры SQL-сервера.

Есть ли способ перезапустить выбранный экземпляр в SMO?

Ответы [ 2 ]

4 голосов
/ 11 августа 2011

Добавить ссылку на 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 голосов
/ 03 ноября 2012

Вы должны сделать перезагрузку вручную! сначала нужно остановить службу и подождать, пока служба изменит свое состояние, а затем запустить службу и снова подождать, пока служба изменит свое состояние.

На сайте MSDN есть пример для этой операции: http://msdn.microsoft.com/en-us/library/ms162139(v=SQL.90).aspx

...