Eu tenho um banco de dados em meu computador executando o SQL Server Express 2014 e gostaria que outros computadores conectados à minha rede pudessem se conectar a ele usando um programa C# que escrevi.
Eu fiz o seguinte:
1. desativou o firewall do Windows. Sei que não preciso fazer isso completamente, mas estou apenas depurando.
2. habilitou o TCP/IP no SQL Server Configuration Manager na máquina que está executando a instância.
Não posso mudar isso para todas as máquinas. No computador do qual estou tentando me conectar, mas não no computador que hospeda o banco de dados, não consigo habilitar isso. Não tenho certeza se isso é um problema. No entanto, na minha máquina, habilitei praticamente tudo e reiniciei tudo.
3. Conexões remotas são permitidas
Usando um .UDL
arquivo para testar a conexão, descobri que no meu computador, se eu selecionar MyComputerName
como servidor, não vejo meu banco de dados listado. Mas se eu entrar MyComputerName\SQLEXPRESS
, vejo o banco de dados e posso me conectar a ele com a segurança integrada do Windows.
Mas se eu fizer logon em outro computador e usar um .UDL
para testar a conexão. Eu posso conectar se eu entrar MyComputerName
como servidor, mas se eu tentar entrar MyComputerName\SQLEXPRESS
como servidor, ele tenta muito, mas depois me diz
[DBNETLIB][ConnectionOpen (Connect()).]SQL Server não existe ou acesso negado.
Novamente, no meu computador usando as seguintes strings de conexão funcionam
Server=MyMachine\SQLEXPRESS;Database=MyDatabase;Integrated Security=True;
Server=MyMachine\SQLEXPRESS;Database=MyDatabase;Trusted_Connection=True;
Mas em outro computador na rede, recebo o erro
Ocorreu um erro relacionado à rede ou específico da instância ao estabelecer uma conexão com o SQL Server. O servidor não foi encontrado ou não estava acessível. Verifique se o nome da instância está correto e se o SQL Server está configurado para permitir conexões remotas. (provider: Named Pipes Provider, erro: 40 - Não foi possível abrir uma conexão com o SQL Server)
Mas eu sei que o servidor tem permissão para conexões remotas e que o nome da instância está em execução, então estou preso. Alguma ideia de onde ir a partir daqui?
Eu encontrei uma solução. Talvez alguém possa expandir isso, porque não entendo completamente.
Quando abri o Management Studio como
MyMachineName\SQLEXPRESS
normalmente faço, anexei o banco de dados lá, não consegui acessá-loMyMachineName\SQLEXPRESS
na string de conexão.No entanto, quando reabri o Managment Studio como
MyMachineName
, anexei o banco de dados lá e removi o\SQLEXPRESS
da minha string de conexão, agora posso acessá-lo.Problema resolvido.