Изменение настроек SQL Server программно - PullRequest
6 голосов
/ 15 февраля 2010

Прошу вас внимательно прочитать мой вопрос.

Возможно, вы знаете, что при установке VS2005 / 2008 с SQL Server Express Edition SQL Server по умолчанию работает в режиме аутентификации Windows. Вы можете использовать SQL Server Management Studio, чтобы изменить режим на Смешанный режим (режим аутентификации Windows и SQL Server).

Аналогично, чтобы разрешить удаленное подключение SQL Server через TCP / IP, необходимо использовать диспетчер конфигурации SQL Server, затем выбрать «Протокол для SQLEXPRESS», а затем изменить параметр «Tcp / IP».

Что мне нужно, это автоматизировать этот процесс программно с помощью C #. То есть мне нужно написать программу на c # для изменения режима или изменения настроек tcp / ip и т. Д.

Может ли кто-нибудь помочь мне с этим, как я могу это сделать?

Спасибо, что поделились своим драгоценным временем.

Ответы [ 5 ]

9 голосов
/ 15 февраля 2010

Вы должны использовать объекты управления SQL Server ( SMO ) - это API для программного управления SQL Server.

UPDATE:

Оказывается немного хитрым: Server.LoginMode (чтение / запись), Server.TcpEnabled и Server.NamedPipesEnabled (получить только, к сожалению) Чтобы изменить протоколы, вам нужно изучить пространство имен Microsoft.SqlServer.Management.Smo.Wmi (следовательно, переходя от «другого конца»):

  • ServerProtocol - представляет протокол сервера
  • ServerProtocolCollection - набор всех протоколов, определенных на данном сервере
5 голосов
/ 10 октября 2012

Эта функция в C # активирует протокол TCP / IP и устанавливает режим входа в смешанный режим.

См. Дополнительную информацию здесь .

вот код:

private static bool SetServerProperties()
    {
        #region standardize Connection String
        string tempCatalog = "master";
        string temp = @"Data Source=" + dataSource + ";Initial Catalog=" + tempCatalog + ";Integrated Security=True;MultipleActiveResultSets=True";
        #endregion

        SqlConnection sqlconnection = new SqlConnection(temp);
        SqlCommand cmd = new SqlCommand("select @@ServerName", sqlconnection);
        sqlconnection.Open();
        string serverName = "";
        try
        {
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
                serverName = dr[0].ToString();
        }
        catch
        {
            MessageBox.Show("Failed to Set SQL Server Properties for remote connections.");
        }

        Server srv = new Server(serverName);
        srv.ConnectionContext.Connect();
        srv.Settings.LoginMode = ServerLoginMode.Mixed;

        ManagedComputer mc = new ManagedComputer();

        try
        {
            Service Mysvc = mc.Services["MSSQL$" + serverName.Split('\\')[1]];

            if (Mysvc.ServiceState == ServiceState.Running)
            {
                Mysvc.Stop();
                Mysvc.Alter();

                while (!(string.Format("{0}", Mysvc.ServiceState) == "Stopped"))
                {
                    Mysvc.Refresh();
                }
            }

            ServerProtocol srvprcl = mc.ServerInstances[0].ServerProtocols[2];
            srvprcl.IsEnabled = true;
            srvprcl.Alter();


            Mysvc.Start();
            Mysvc.Alter();

            while (!(string.Format("{0}", Mysvc.ServiceState) == "Running"))
            {
                Mysvc.Refresh();
            }
            return true;
        }
        catch
        {
            MessageBox.Show("TCP/IP connectin could not be enabled.");
            return false;
        }
    }
4 голосов
/ 15 февраля 2010

А как насчет изменения реестра?

Настройки протокола клиента хранятся здесь: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSSQLServer \ Client \ SNI9.0 Проверьте ProtocolOrder.

Режим аутентификации хранится здесь: HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Microsoft SQL Server \ MSSQL.1 \ MSSQLServer \ LoginMode

См: Настройки аутентификации

3 голосов
/ 30 января 2013

Я смог сделать это с небольшим размером, выполнив эту хранимую процедуру из C #:

USE [master]
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2 
GO

Это не выглядит много, но работает без нареканий и мгновенно, без перезапуска сервисов.

2 голосов
/ 15 февраля 2010

Я думаю, что вы могли бы решить вашу проблему, установив версию SQL Server Express без вывода сообщений, используя файл конфигурации для процесса установки.

В по этой ссылке вы можете найти параметры командной строкидля установки.

В этот вы можете найти, как сделать ваш файл конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...