2010-02-15 3 views
5

Прошу внимательно прочитать мой вопрос.Изменение программных настроек SQL Server

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

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

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

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

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

ответ

9

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

UPDATE:

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

  • ServerProtocol - представляет собой серверный протокол
  • ServerProtocolCollection - коллекция все протоколы, определенные на заданном сервере
+0

Спасибо Алекс за ваш быстрый ответ. – IrfanRaza

+0

Собирался предложить это, но я не нашел, где в SMO вы можете изменить протоколы соединений. Но, самое вероятное место их поиска. – Will

+0

Спасибо, я постараюсь больше копать в SMO. – IrfanRaza

2

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

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

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

+0

Спасибо Джонатан, но я этого не хочу. Потому что мне нужно изменить настройки для уже установленного продукта. – IrfanRaza

+0

О! Хорошо: D. Удачи! AlexS Answer выглядит хорошей отправной точкой. – Jonathan

4

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

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

Режим аутентификации хранится здесь: HKEY_LOCAL_MACHINE \ SOFTWARE \ См Microsoft \ Microsoft SQL Server \ MSSQL.1 \ MSSQLServer \ LoginMode

: Authentication Settings

+0

Спасибо, чувак! Кажется, еще одна приятная вещь. – IrfanRaza

5

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

Просмотреть дополнительную информацию here.

вот код:

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; 
     } 
    } 
+3

Это было отличное решение и потребовало нескольких вещей: 1) Добавьте ссылки на Microsoft.SqlServer.ConnectionInfo, Microsoft.SqlServer.Management.Sdk.Sfc, Microsoft.SqlServer.Smo, Microsoft.SqlServer.SqlEnum, Microsoft. SqlServer.SqlWmiManagement и Microsoft.SqlServer.WmiEnum найдены в C: \ Program Files (x86) \ Microsoft SQL Server \ 100 \ SDK \ Assemblies 2) Добавьте с помощью Microsoft.SqlServer.Management.Smo и с помощью Microsoft.SqlServer.Management .Smo.Wmi. –

+0

Отличное решение. В дополнение к комментарию @PaulyGlott мне также необходимо добавить строку: 'srv.Settings.Alter();' after 'srv.Settings.LoginMode = ServerLoginMode.Mixed;', в противном случае она не сохранит измененную настройку. –

3

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

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

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

+0

Спасибо Крису, но, похоже, вы слишком поздно, чтобы ответить на этот вопрос. – IrfanRaza

+0

это также должно изменить 'TCPIP' и' NamedPipes'? или это только изменяет «ServerLoginMode» на «Смешанный»? – Niklas

Смежные вопросы