Alterando configurações do SQL Server por meio de programação

Eu peço que você leia a minha pergunta com cuidado.

Você pode saber quando você instala o VS2005 / 2008 com a edição do SQL Server Express, o SQL Server opera no modo de autenticação do Windows por padrão. Você pode usar o SQL Server Management Studio para alterar o modo para o modo Misto (modo Autenticação do Windows e do SQL Server).

Da mesma forma para permitir a conexão remota do SQL Server por meio de TCP / IP, é necessário usar o SQL Server Configuration Manager, selecionar Protocolo para SQLEXPRESS e, em seguida, alterar a configuração da opção TCP / IP.

O que eu preciso é automatizar este processo programaticamente usando c #. Ou seja, eu preciso escrever um programa ac # para mudar o modo ou alterar as configurações de tcp / ip etc.

Alguém pode me ajudar nisso, como eu poderia fazer isso?

Obrigado por compartilhar seu precioso tempo.

Você deve usar o SQL Server Management Objects ( SMO ) – essa é uma API para gerenciar o SQL Server por meio de programação.

ATUALIZAR:

Prova ser um pouco complicado: Server.LoginMode (leitura / gravação), Server.TcpEnabled e Server.NamedPipesEnabled (somente get, infelizmente). Para modificar os protocolos, você precisa examinar o namespace Microsoft.SqlServer.Management.Smo.Wmi (indo do ‘outro lado’):

  • ServerProtocol – representa o protocolo do servidor
  • ServerProtocolCollection – uma coleção de todos os protocolos definidos em um determinado servidor

Esta function em C # habilitará o protocolo TCP / IP e definirá o modo de login como modo misto.

Veja informações complementares aqui .

aqui está o código:

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

E quanto a modificar o registro?

Configurações de protocolo de cliente são armazenadas aqui: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSSQLServer \ Client \ SNI9.0 Verifique ProtocolOrder.

Modo de autenticação é armazenado aqui: \ SQL Server \ MSSQL.1 \ MSSQLServer \ LoginMode HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft

Consulte: Configurações de autenticação

Eu era capaz de fazer isso com uma pequena pegada, executando este procedimento armazenado a partir de c #:

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

Não parece muito, mas funciona de forma impecável e instantânea, sem reiniciar os serviços.

Acho que você poderia resolver seu problema fazendo uma instalação silenciosa da edição do SQL Server Express usando um arquivo de configuração para o processo de instalação.

Neste link você pode encontrar os parâmetros da linha de comando para a instalação.

Neste você pode encontrar como fazer seu arquivo de configuração.