none
BD não atualizando ao utilizar caminho relativo para String de Conexão RRS feed

  • Pergunta

  • Olá, como o título diz sempre que eu utilizo o caminho relativo do BD como string de conexão eu consigo realizar as operações básicas, porém quando reinicio o sistema nada do que eu fiz é mantido, nem mesmo as chaves primárias seriais do banco são incrementada. É como se os dados que inseri nunca tivessem sido gravados no BD.

    private string strcon = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=" + Application.StartupPath + "\Database\DB_SAOAS.mdf;Integrated Security=True"; 

    Entretanto, se utilizo o caminho absoluto (abaixo), os dados são guardados normalmente...

    private string strcon = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Fulano\Sistema\Database\DB_System.mdf;Integrated Security=True";

    Eu necessito do caminho relativo para instalar o sistema no computador do usuário... Se houver outro meio de resolver isso, ficaria grato.

    Para referência, utilizo Windows 8.1, Microsoft Visual Studio Professional 2012 com SQL Server que vem incluido nele.

    Me desculpem se postei errado, é meu primeiro post...

    segunda-feira, 23 de novembro de 2015 16:55

Respostas

  • Possivelmente não é a melhor forma, porém funciona (acredito que funcionaria em produção também):

    string pathToExe = Application.StartupPath;
    var dirName = new DirectoryInfo(pathToExe).Name;
    pathToExe = dirName.Equals("Debug") || dirName.Equals("Release") ? Directory.GetParent(pathToExe).Parent.FullName : pathToExe;
    
    MessageBox.Show(pathToExe);

    Ele verifica se a pasta "atual" é chamada Debug ou Release e pega o "avô" deste diretório; no caso: o root.


    Att., Rafael Simor

    • Marcado como Resposta Bruno CM terça-feira, 24 de novembro de 2015 19:06
    terça-feira, 24 de novembro de 2015 01:44

Todas as Respostas

  • Seu banco é criado toda vez que aplicação é iniciada? Ou é estático? Se for estático, você não precisa usar o attach toda vez, basta ler a string, ou então você talvez não esteja salvado os dados no banco corretamente, verifique se os dados que você está inserindo está sendo salvo no BD!


    segunda-feira, 23 de novembro de 2015 20:30
  • Boa tarde.

    Provavelmente teu Application.StartupPath está pegando o caminho do Debug/Bin.

    Tente com "AppDomain.CurrentDomain.BaseDirectory".


    Att., Rafael Simor

    segunda-feira, 23 de novembro de 2015 21:20
  • O banco é estático, entretanto eu não conheço o diretório que ele ficará instalado no computador do usuário, por isso preciso do caminho dinâmico.

    Como disse, quando uso o caminho absoluto, ele funciona normalmente, a única coisa que mudei foi usar o Application.StartUpPath para obter o caminho dinâmico, e quando o faço o BD para de funcionar gravar os dados.

    terça-feira, 24 de novembro de 2015 00:58
  • Não funcionou, AppDomain.CurrentDomain.BaseDirectory retorna a seguinte string:
    "C:\\Users\\Fulano\\bin\\Debug\\"

    Que é o mesmo que Application.StartUpPath retornava...
    terça-feira, 24 de novembro de 2015 01:00
  • Possivelmente não é a melhor forma, porém funciona (acredito que funcionaria em produção também):

    string pathToExe = Application.StartupPath;
    var dirName = new DirectoryInfo(pathToExe).Name;
    pathToExe = dirName.Equals("Debug") || dirName.Equals("Release") ? Directory.GetParent(pathToExe).Parent.FullName : pathToExe;
    
    MessageBox.Show(pathToExe);

    Ele verifica se a pasta "atual" é chamada Debug ou Release e pega o "avô" deste diretório; no caso: o root.


    Att., Rafael Simor

    • Marcado como Resposta Bruno CM terça-feira, 24 de novembro de 2015 19:06
    terça-feira, 24 de novembro de 2015 01:44
  • Como e que voce vai instalar o programa no cliente?

    xml deveria ter o caminho e voce pega ai o caminho ou voce cria o teu proprio xml com a conecao 


    A flower cannot blossom without sunshine, and man cannot live without love.

    terça-feira, 24 de novembro de 2015 16:13
    Moderador
  • Possivelmente não é a melhor forma, porém funciona (acredito que funcionaria em produção também):

    string pathToExe = Application.StartupPath;
    var dirName = new DirectoryInfo(pathToExe).Name;
    pathToExe = dirName.Equals("Debug") || dirName.Equals("Release") ? Directory.GetParent(pathToExe).Parent.FullName : pathToExe;
    
    MessageBox.Show(pathToExe);

    Ele verifica se a pasta "atual" é chamada Debug ou Release e pega o "avô" deste diretório; no caso: o root.


    Att., Rafael Simor

    Obrigado, com esse método não houve mais problemas com o banco.
    terça-feira, 24 de novembro de 2015 19:07