COMO CONFIGURAR A PORTA DO SQL EXPRESS VIA CÓDIGO

KELVINBETHO 03/03/2017 09:18:04
#472067
Bom dia pessoal.
Teria como configurar a porta via código, sem ter que entrar no sql express configuration manager?
Digo via programação?
Abraços!
TUNUSAT 03/03/2017 10:44:39
#472072
KELVINBETHO,


O que você quer fazer é uma [Ô]Connection String[Ô]?!?

https://www.connectionstrings.com/


Ou seria ...

https://social.msdn.microsoft.com/Forums/pt-BR/ff4c904d-a5ce-4fa3-a6e3-31bfe44cc9d4/acessar-sql-server-express-via-ddncombr-em-c?forum=vscsharppt

 @[Ô]Data Source=meupc\SQLEXPRESS, 1433;Initial Catalog=meuBanco;User Id=usuario;Password=xxxxxxxxxxxxx;[Ô];  



[][ô]s,
Tuinusat.
KELVINBETHO 03/03/2017 15:37:41
#472086
Boa tarde TUNUSAT, não, a string eu tenho. o que eu quero é uma rotina (Não sei se é possível) para configurar a porta do Slq Express, aquela mesma configuração que a gente faz dentro do configuration manager em IPConfig. Só que eu queria fazer isso dentro do sistema, dentro do meu projeto. Por que tive problemas com o usuario master e não conectava nem a pau, até troquei rotinas de conexão e tudo mais, até descobrir que era a bendita da porta que estava em branco. Fui lá no configuration Manager e adicionei a porta 1433 e tudo deu certo., mas eu queria uma rotina que fizesse isso sem ter que entrar no configuration manager do SQLExpress.
DS2T 04/03/2017 16:58:57
#472130
Olá, fiz algo parecido um tempo atrás.

Vai precisar usar a dll SMO do SQL Server.
Especificamente, o namespace Microsoft.SqlServer.Management.Smo.Wmi

Pesquise sobre as classes ManagedComputer e ServerProtocol.

Se tiver dificuldade, me dá um toque que bolo um exemplo.

Abraços!
PLUGSOFTSM 04/03/2017 20:25:02
#472151
Amigo... eu fiz essa função que permite liberar porta no firewall do Windows
Ela está em Vb.Net
Com alguns ajustes vc escreve ela em C

Public Function CreatePort(Nome As String, NumPort As Integer, Optional Scopo As NET_FW_SCOPE_ = NET_FW_SCOPE_.NET_FW_SCOPE_ALL) As Boolean
Try
If String.IsNullOrEmpty(Nome) Then Throw New Exception([Ô]Não foi informado um Nome para a porta...[Ô])
If NumPort = 0 Then Throw New Exception([Ô]Falta informar o número da porta a ser craida...[Ô])
Dim Ports As INetFwOpenPorts = Nothing
Dim NetFwMgrType As Type = Type.GetTypeFromProgID([Ô]HNetCfg.FwMgr[Ô], False)
Dim mgr As INetFwMgr = DirectCast(Activator.CreateInstance(NetFwMgrType), INetFwMgr)
Ports = DirectCast(mgr.LocalPolicy.CurrentProfile.GloballyOpenPorts, INetFwOpenPorts)
Dim Tipo As Type = Type.GetTypeFromProgID([Ô]HNetCfg.FWOpenPort[Ô])
Dim Port As INetFwOpenPort = DirectCast(Activator.CreateInstance(Tipo), INetFwOpenPort)
Port.Name = Nome
Port.Port = NumPort
Port.Scope = NET_FW_SCOPE_.NET_FW_SCOPE_ALL
Port.Protocol = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP [ô]protocol;
Port.Enabled = True
Port.IpVersion = NET_FW_IP_VERSION_.NET_FW_IP_VERSION_ANY
Port.RemoteAddresses = [Ô]*[Ô]
Ports.Add(Port)
Return True
Catch ex As Exception
MessageBox.Show(ex.Message, [Ô]Firewall do windows[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
End Try
End Function
LVFIOROT 05/03/2017 17:26:39
#472182
via regedit https://support.microsoft.com/pt-br/help/823938/how-to-configure-sql-server-to-listen-on-a-specific-port

SQL Server 2008 e SQL Server 2005

Para configurar uma instância do SQL Server 2008 ou SQL Server 2005 para usar uma porta estática, execute as etapas descritas no como: configurar um servidor para escutar em uma porta de TCP específica (SQL Server Configuration Manager) tópico nos Manuais Online do SQL Server 2005 ou nos Manuais Online do SQL Server 2008.

Para configurar uma porta estática para o especializado dedicado administrador conexão (DAC), você deve atualizar a chave de registro que corresponde à sua instância. Por exemplo, a chave do registro pode ser o seguinte:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.. X\MSSQLServer\SuperSocketNetLib\AdminConnection\Tcp
Observação: O [Ô]X[Ô] em [Ô]MSSQL. X[Ô]é um número que indica o diretório onde a instância é instalada para o SQL Server 2005 ou o nome da instância do SQL Server 2008.

eu conferi e é tranquilo e funciona)
assim como no manager precisa reiniciar


outras formas, mas mudando o regedit
http://stefanteixeira.com/2015/09/01/automating-sqlserver-config-with-powershell-wmi/
https://blog.dbi-services.com/sql-server-2012-configuring-your-tcp-port-via-powershell/
KELVINBETHO 10/03/2017 15:11:42
#472351
Boa tarde, pessoal
DS2T vou tentar fazer um teste aqui, qualquer coisa eu te respondo.

PLUGSOFTSM, bom exemplo, mas o que eu preciso é alterar ou inserir a porta dentro do sql express. Alguns computadores que estou tendo problemas é por causa desta bendita porta que nem sequer estava lá, tive que entrar no manager e coloca-las.

LVFIOROT vou dar uma olhada nestes tópicos e te respondo.

Por enquanto obrigado á vcs pelo auxilio, abraços!
RICARDOCENTENO 11/03/2017 15:53:29
#472378
Vale lembrar que estes procedimentos tanto via regedit como via código para abrir o firewall do windows citados pelos amigos acima, precisam ter premissão de administrdor do windows, ou seja, este programa não rodará de forma alguma em um usuário comum.
KELVINBETHO 13/03/2017 19:31:14
#472413
Boa noite, DS2T, voce tem algum exemplo?
DS2T 13/03/2017 20:24:11
#472415
Boa noite.

Faça referência a dll:

using Microsoft.SqlServer.Management.Smo.Wmi;



Após isso:





	
private const instancia = [Ô]SQLEXPRESS[Ô];

private void MudaPorta(int porta)
{
ManagedComputer pc = new ManagedComputer();
Service servicoInstancia = pc.Services[string.Concat([Ô]MSSQL$[Ô], instancia)];

if (servicoInstancia.ServiceState == ServiceState.Running)
{
servicoInstancia.Stop();
}

KeyValuePair<ServerProtocol, ProtocolProperty> p = RetornaProtocoloIP();

p.Value.Value = porta;
p.Key.Alter();

Thread.Sleep(5000);
servicoInstancia.Start();
}

private KeyValuePair<ServerProtocol, ProtocolProperty> RetornaProtocoloIP()
{
ManagedComputer pc = new ManagedComputer();
ServerInstance s = pc.ServerInstances[instancia];
ServerProtocol prot = s.ServerProtocols[[Ô]Tcp[Ô]];

return new KeyValuePair<ServerProtocol, ProtocolProperty>(prot, prot.IPAddresses[[Ô]IPAll[Ô]].IPAddressProperties[[Ô]TcpPort[Ô]]);
}




O código pode parecer um pouco estranho, porque estou usando uma função que retorna um KeyValuePair.
é que retirei esse exemplo do meu projeto, e eu reaproveito essa função pra saber se a porta já tinha sido configurada...

O código também não precisa ser tão grande. Repare que eu uso um pedaço de código para Parar o serviço do SQL Server e depois iniciar novamente, para que a mudança tenha efeito.

Outra coisa que reparei é que de vez em quando, simplesmente não iniciava novamente. Aí coloquei um Sleep. Como no meu código, eu executo isso dentro de uma Thread secundária, não fica travada a tela...

Abraços!
KELVINBETHO 13/03/2017 23:45:17
#472417
Obrigado DS2T, vou fazer o teste, valeu.
Página 1 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas