2
respostas

Erro de Connection String do arquivo .MDF

Boa Noite!

Pessoal estou criando um Windows Form Application e utilizando o Entity Framework.

Tenho um Banco de Dados no meu projeto chamado BancoXXXX.mdf em SQL Server 2012 Express. Na minha máquina funciona normal, o problema é quando crio um instalador e vou rodar na máquina do cliente, dá um erro de conexão com o Banco, acredito que seja a connection String que está incorreta.

Já instalei o SQL Server Express na máquina que estou tentando rodar o executável, mas dá erro:

"Erro de rede ou específico à instância ao estabelecer 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. (...)"

Abaixo o código do meu App_Config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="SistemaBrandMemberConnectionString"
            connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=&quot;G:\Desenvolvimento\BancoXXXX\BancoXXXX\BancoXXXX.mdf&quot;;Integrated Security=True;Connect Timeout=30"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
</configuration>

Alguém sabe me dizer como eu faço pra deixar essa connection string dinâmica, para rodar o executável em outros computadores?

Desde já obrigada pessoal!

2 respostas

Olá, você pode usar no config uma váriável chamada |DataDirectory|, ela irá representar o caminho para acessar a base que você deseja. Ficando assim

AttachDbFilename=|DataDirectory|\Database.mdf

E, ao iniciar sua aplicação você pode fazer

AppDomain.CurrentDomain.SetData("DataDirectory", <caminho_para_mdf>);

Com isto, você pode fazer deploy da sua base onde desejar e ter o controle sobre a configuração do valor da variável.

Mais detalhes sobre o DataDirectory você pode encontrar aqui => DataDirectory

Espero ter ajudado em algo, até mais.

Oi Eirielson, muito obrigada pela resposta.

Eu pesquisei e vi que usar o DataDirectory é uma opção, eu até cheguei a usar, o problema que encontrei foi que quando eu uso o

AppDomain.CurrentDomain.SetData("DataDirectory", Environment.CurrentDirectory);

o Environment.CurrentDirectory pega o diretório da pasta bin, e meu .mdf, assim como no curso de Entity Framework, está na raíz do projeto.

Tentei pegar com Substring só a primeira parte do diretório do C:\ até a pasta que está o arquivo .mdf, mas quando uso o executável ainda dá erro na connection string.

O que vou tentar agora é colocar o .mdf dentro da pasta bin e ver se assim funciona.

Se alguém tiver alguma sugestão para resolver o problema de outra forma, é só falar rs.

Obrigada!