none
mudar de banco

    Question

  • Olá pessoal, sou iniciante em aspx, e tenho um probleminha.

    Estou fazendo um sistema, só que varios varios clientes acessam este sistema, cada cliente possui seu banco, ou seja, eu estou querendo fazer o seguinte, tenho um formulario de login, quando o admin logar o sistema vai verificar qual banco ele utiliza, pois no banco default tem todos o usuarios e as conexoes dos bancos dele, ai ele vai redirecionar para uma pagina q ja vai acessar o banco deste usuario. Eu não como posso fazer...alguem pode me ajudar???...

    estou desenvolvendo em vb.net utilizando visual studio.

    Abraços.

    Friday, July 06, 2007 1:38 PM

Answers

  • Joao.

     

    O como fazer eu te aconselho a primeira resposta do post. Guardas as strings de conexao no web.config. chamando pelo nome apartir da prefeitura etc...

    Quanto ao fato de usar bancos diferentes eu te indico que procure material sobre o data access aplication block.

     

    http://www.codeplex.com/entlib

     

    Porque o DAAB utiliza o provider especifico da banco. Sendo sqlserver, oracle ou oledb.

    E do ponto de vista funcional do "como" fazer, a comunicacao poderia ser feito atravez de webservices....

     

    Espero ter ajudado.

    Friday, July 06, 2007 5:33 PM
  •  

    Bom...

    Vamos por partes.

     

    Primeiro vou te passar uma classe para retornar a string de conexao. 

    Code Snippet

    //*****************************************************************

    // Classe BancoDados

    // Criada de acordo com o pattern Sigleton:

    // http://www.dofactory.com/Patterns/PatternSingleton.aspx

    //*****************************************************************

    public sealed class BancoDados

    {

    private static readonly BancoDados instance = new BancoDados();

    private string strConexaoServidor;

    private string strConexaoCatalogo;

    private string strConexaoUsuario;

    private string strConexaoSenha;

    private BancoDados()

    {

    }

    public static BancoDados Instance

    {

    get

    {

    return instance;

    }

    }

    public string StrConexaoServidor

    {

    get

    {

    return strConexaoServidor;

    }

    set

    {

    strConexaoServidor = value;

    }

    }

    public string StrConexaoCatalogo

    {

    get

    {

    return strConexaoCatalogo;

    }

    set

    {

    strConexaoCatalogo = value;

    }

    }

    public string StrConexaoUsuario

    {

    get

    {

    return strConexaoUsuario;

    }

    set

    {

    strConexaoUsuario = value;

    }

    }

    public string StrConexaoSenha

    {

    get

    {

    return strConexaoSenha;

    }

    set

    {

    strConexaoSenha = value;

    }

    }

    public string ConnectionString()

    {

    return "Data Source=" + strConexaoServidor + ";" +

    "Initial Catalog=" + strConexaoCatalogo + ";" +

    "Persist Security Info=True;" +

    "User ID=" + strConexaoUsuario + ";" +

    "Password=" + strConexaoSenha + ";" +

    "Connect Timeout=120";

    }

    }

     

     O metodo connectionString() esta retornando a string de conexao para SQLServer, altere a classe para que retorne a string de conexao para interbase.

     Esta classe é estatica, então sempre que tu chamar a connectionString retornara a string que foi salva.

     

     

    O trabalho que tu terás depois é, quando selecionar a prefeitura fazer um switch por exemplo.

     

    BancoDados bd = BancoDados.Instance; // Cria a instancia da classe bancodados

     

    Case prefeitura1:

       bd.strConexaoServidor = "Servidor1";

       bd.strConexaoCatalogo  = "Catalogo1";

       bd.strConexaoUsuario = "Usuario1";

       bd.strConexaoSenha  = "Senha1";

    Case prefeitura2:

     

       bd.strConexaoServidor = "Servidor2";

       bd.strConexaoCatalogo  = "Catalogo2";

       bd.strConexaoUsuario = "Usuario2";

       bd.strConexaoSenha  = "Senha2"; 

     

    E quando fores conectar para buscar os dados:

     

    BancoDados bd = BancoDados.Instance; // Cria a instancia da classe bancodados

     

    public SqlCommand BDCommand = new SqlCommand();

    public SqlConnection BDConnection;

     

    BDConnection = new SqlConnection(bd.ConnectionString()); // Aqui busca a string de conexao

     

    Note que o exemplo que eu te passei foi para sqlserver, tu tera que alterar para o Interbase.

    Ai nao saberei se sera oledb ou outro odbc.......

     

    Espero finalmente ter ajudado - heheheheh...

    Abraço!

     

    Friday, July 06, 2007 6:08 PM

All replies

  • Joao, tu estas colocando a string de conexao no web.config???

     

    Se sim tu tem uma propriedade chamada name. na string de conexao.

     

    Code Snippet

    <add name="nomedaconexao"  // user1, user2 ouo nome do usuario que tu cadastra...

    connectionString= "string de conexao para o banco deste usuario"  />

     

    Eu uso um metodo para salvar a string de conexao.

     

    Code Snippet

    public void SalvaConnectionString(string sSQL)

    {

        this.SConectionString = sSQL;

        Configuration webConfig = WebConfigurationManager.OpenWebConfiguration("~");

        ConnectionStringsSection dbConnString = webConfig.ConnectionStrings;

        dbConnString.ConnectionStrings.Add(new ConnectionStringSettings("nomedaconexao", this.SConectionString);

        webConfig.Save();

    }

     

     

    Eu uso um metodo para ler a string de conexao.

     

    Code Snippet

    public string LoadConnectionString()

    {

        Configuration webConfig = WebConfigurationManager.OpenWebConfiguration("~");

        ConnectionStringsSection dbConnString = webConfig.ConnectionStrings;

        this.SConectionString = webConfig.ConnectionStrings.ConnectionStrings["nomedaconexao"].ConnectionString ;

        return this.SConectionString;

    }

     

    Não esquecer de usar: 

    Code Snippet
    using
    System.Web.Configuration;

     

    Espero ter ajudado....

     

     

     

    Friday, July 06, 2007 1:57 PM
  • Estou não, pq a string ela está no banco de dados, a string muda conforme o usuario, cada usuario tem seu banco.

    Você sabe como isso funciona?

    Abraços!!!

    Friday, July 06, 2007 2:04 PM
  • Joao.

     

    Não entendi a tua colocacao, cada usuario tem o seu banco de dados, mas para abri-lo você deve ter a sua string de conexao certo!

     

    A diferenca que eu vejo entre a forma que voce esta fazendo e a forma que eu coloquei é o local onde a informacao esta guardada. Mas de qualquer forma voce terá que ter uma referencia que indique que a StringConnection "X" pertence ao usuario "N".

    No aguardo!

    Friday, July 06, 2007 2:52 PM
  • Faz uma consulta no banco e recupera a querystring do usuário que está acessando.

    Coloca esse valor numa variável de sessão e à partir daí só acessa esse banco...

    usa o OleDbConnection pq ele acessa todos os bancos

     

    Obs: cuidado com as querys sql, tem diferenças de um banco pra outro

    Obs2: o que você tá fazendo é loucura (um banco pra cada usuário)

     

    mas enfim, se ajudou, marque como resposta

    Friday, July 06, 2007 3:28 PM
  • Meu sistema ele faz o seguinte: Ele controla setor tributario de dezenas de prefeituras, ele ainda é desktop e eu quero passar pra web, cada prefeitura utiliza o seu sistema, com ele web eu estou querendo fazer o seguinte: vou criar apenas um website e indicar o banco de acordo com o usuario.

    Na primeira pagina do site o usuario escolhe qual prefeitura ele quer entrar, assim que ele escolheu a prefeitura ele é redirecionado para a pagina com informações referentes aquela prefeitura escolhida.

    Como farei isso???

    Friday, July 06, 2007 4:51 PM
  • Joao.

     

    O como fazer eu te aconselho a primeira resposta do post. Guardas as strings de conexao no web.config. chamando pelo nome apartir da prefeitura etc...

    Quanto ao fato de usar bancos diferentes eu te indico que procure material sobre o data access aplication block.

     

    http://www.codeplex.com/entlib

     

    Porque o DAAB utiliza o provider especifico da banco. Sendo sqlserver, oracle ou oledb.

    E do ponto de vista funcional do "como" fazer, a comunicacao poderia ser feito atravez de webservices....

     

    Espero ter ajudado.

    Friday, July 06, 2007 5:33 PM
  • Todos os bancos das prefeituras são interbase, a unica coisa que vai mudar eu acho é o caminho do banco, como eu faço para em tempo de execução mudar o caminho do banco? Pois o caminho sera indicado na hr q o usuario faz o login.

    Abraços!!!

    Friday, July 06, 2007 5:44 PM
  • João Paulo, te recomendaria o uso de webservices, como sugerido pelo leolima.

     

    Também tenho algumas aplicações desktop em clientes (feitas em Delphi) que precisam atualizar alguns dados (índices de cálculos, por exemplo). Criei um webservice em .net e todas minhas aplicações Delphi fazem uso deste.

     

     

    [ ]´s

    Friday, July 06, 2007 5:49 PM
  • Vlw pessoal vou bater um papo aqui com o pessoal e vamos ver se vamos mudar pra webservice.

    Abraaços!!!

    Friday, July 06, 2007 5:56 PM
  •  

    Bom...

    Vamos por partes.

     

    Primeiro vou te passar uma classe para retornar a string de conexao. 

    Code Snippet

    //*****************************************************************

    // Classe BancoDados

    // Criada de acordo com o pattern Sigleton:

    // http://www.dofactory.com/Patterns/PatternSingleton.aspx

    //*****************************************************************

    public sealed class BancoDados

    {

    private static readonly BancoDados instance = new BancoDados();

    private string strConexaoServidor;

    private string strConexaoCatalogo;

    private string strConexaoUsuario;

    private string strConexaoSenha;

    private BancoDados()

    {

    }

    public static BancoDados Instance

    {

    get

    {

    return instance;

    }

    }

    public string StrConexaoServidor

    {

    get

    {

    return strConexaoServidor;

    }

    set

    {

    strConexaoServidor = value;

    }

    }

    public string StrConexaoCatalogo

    {

    get

    {

    return strConexaoCatalogo;

    }

    set

    {

    strConexaoCatalogo = value;

    }

    }

    public string StrConexaoUsuario

    {

    get

    {

    return strConexaoUsuario;

    }

    set

    {

    strConexaoUsuario = value;

    }

    }

    public string StrConexaoSenha

    {

    get

    {

    return strConexaoSenha;

    }

    set

    {

    strConexaoSenha = value;

    }

    }

    public string ConnectionString()

    {

    return "Data Source=" + strConexaoServidor + ";" +

    "Initial Catalog=" + strConexaoCatalogo + ";" +

    "Persist Security Info=True;" +

    "User ID=" + strConexaoUsuario + ";" +

    "Password=" + strConexaoSenha + ";" +

    "Connect Timeout=120";

    }

    }

     

     O metodo connectionString() esta retornando a string de conexao para SQLServer, altere a classe para que retorne a string de conexao para interbase.

     Esta classe é estatica, então sempre que tu chamar a connectionString retornara a string que foi salva.

     

     

    O trabalho que tu terás depois é, quando selecionar a prefeitura fazer um switch por exemplo.

     

    BancoDados bd = BancoDados.Instance; // Cria a instancia da classe bancodados

     

    Case prefeitura1:

       bd.strConexaoServidor = "Servidor1";

       bd.strConexaoCatalogo  = "Catalogo1";

       bd.strConexaoUsuario = "Usuario1";

       bd.strConexaoSenha  = "Senha1";

    Case prefeitura2:

     

       bd.strConexaoServidor = "Servidor2";

       bd.strConexaoCatalogo  = "Catalogo2";

       bd.strConexaoUsuario = "Usuario2";

       bd.strConexaoSenha  = "Senha2"; 

     

    E quando fores conectar para buscar os dados:

     

    BancoDados bd = BancoDados.Instance; // Cria a instancia da classe bancodados

     

    public SqlCommand BDCommand = new SqlCommand();

    public SqlConnection BDConnection;

     

    BDConnection = new SqlConnection(bd.ConnectionString()); // Aqui busca a string de conexao

     

    Note que o exemplo que eu te passei foi para sqlserver, tu tera que alterar para o Interbase.

    Ai nao saberei se sera oledb ou outro odbc.......

     

    Espero finalmente ter ajudado - heheheheh...

    Abraço!

     

    Friday, July 06, 2007 6:08 PM
  • Leolima vlw cara...vcs são gente fina d mais...

    Muito obrigado...

    Vou fazer oq vc me disse...

    Abraços!!!

    Friday, July 06, 2007 6:13 PM
  • Ola estou com a mesma dificuldade e ainda não consegui implementar a solução!! pode me dar mais dicas!!!

     

    Thursday, June 19, 2008 8:52 PM