none
Como usar 2 string de conexão RRS feed

  • Pergunta

  • Boa Noite!

    Eu quero que quando abrir o sistema ele teste abrir uma conexão com o banco de dados local, se não der certo que ele use sempre a segunda string de conexão ( que vai ser quando o usuário estiver usando fora da rede local, remotamente).

    Como faço isso de modo automático?

    Eu não queria criar 2 instalação de sistema, um para rede local, outro para externo.

    Obrigado!

    terça-feira, 20 de agosto de 2013 00:52

Todas as Respostas

  • Guarde as string de conexão em um arquivo a parte, exemplo web.config.

    Recupere assim:

                SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["BDTESTE1"].ToString());
    
                try
                {
                    con.Open();
                }
                catch (Exception exe)
                {
                    if (con.State == ConnectionState.Closed)
                    {
                        con = new SqlConnection(ConfigurationManager.ConnectionStrings["BDTESTE2"].ToString());
                        con.Open();
                    }
                }
    Espero ter ajudado.

    terça-feira, 20 de agosto de 2013 10:57
  • Você quer conectar diferentes bancos de dados? É apenas um exercício acadêmico?

    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    terça-feira, 20 de agosto de 2013 11:17
  • JoãoMarques
    Esta ideia que eu tive mesmo ... mas como faço para que depois todos comando SQL seja usado com a segunda string de conexão?

    Eu estou usando Entity Framework

    Marcio_Nogueira
    Na verdade é no mesmo banco de dados, só que um momento o usuário vai usar o sistema de dentro da empresa, e em outro momento vai usar o sistema fora de empresa, então vai usar o banco remotamente, entendeu?
    terça-feira, 20 de agosto de 2013 18:15
  • Euripedes,

    Existe a possibilidade de você também verificar de onde vem a requisição e setar automaticamente esta string de conexão, segue um exemplo:

    varip = Request.UserHostAddress;
    
                var classA = "10.";
                var classB = "172";
                var classC = "192";
    
                var classIP = ip.Substring(0, 3);
    
                if (classIP == classA || classIP == classB || classIP == classC)
                {
                    //Acesso local
                }
                else
                {
                    //Acesso externo
                }


    Ricardo Minoru Makiyama



    segunda-feira, 26 de agosto de 2013 12:16
  • Propus como resposta a dica do Ricardo mas...

    mas, veja bem, se você vai ter dois bancos de dados você via ter dados em um que não estarão no outro. Precisará também de uma estratégia para atualizar os dados e deixar os dois iguais depois, viu?

    Ou isso não será necessário?

    Você pode manter uma rotina que toda vez que ele estiver com disponibilidade de usar o banco remoto pegar os dados do local e mandar...


    segunda-feira, 26 de agosto de 2013 13:35
  • Propus como resposta a dica do Ricardo mas...

    mas, veja bem, se você vai ter dois bancos de dados você via ter dados em um que não estarão no outro. Precisará também de uma estratégia para atualizar os dados e deixar os dois iguais depois, viu?

    Ou isso não será necessário?

    Você pode manter uma rotina que toda vez que ele estiver com disponibilidade de usar o banco remoto pegar os dados do local e mandar...


    Na verdade será apenas 1 banco de dados, ora acessado de dentro da rede, ora de fora.

    Acho que teria quer se fazer algo dentro do contexto do Entity Framework.

    Dentro do construtor ter algo que teste a conexão ao servidor como se estivesse dentro da rede(seria bom um tempo limite de tempo para tentar se abrir conexão, como se faz isso, quando executa-se o banco.database.Ope() tentaria fazer a conexão por alguns segundos apenas), se não der certo usar a segunda string de conexão do arquivo App.Config, e salve para que todas as outra conexões sejam realizadas usando a segunda string de conexão.

    terça-feira, 27 de agosto de 2013 22:08
  • Boa Noite Euripedes

    Eu tentaria uma abordagem um pouco mais dinâmica. Ate mesmo o uso de uma Factory para construir conexoes de diversos tipos.

    Abraco

    terça-feira, 24 de setembro de 2013 06:20