none
Fazer uma conexão várias vezes ou abrir apenas uma vez ? RRS feed

  • Pergunta

  • Estou com essa dúvida.

    A cada ação abrir uma nova conexão com o banco de dados ou deixar uma conexão aberta durante todo o processo ?

     

    Att.
    Miguel Müller

    quarta-feira, 22 de dezembro de 2010 00:12

Respostas

  • Miguel,

    A acao de open/close de conexao é um dos processos mais demorados que existe.

    Mais a Microsoft pensou nisso e criou um esquema de pool de conexao, ou seja, quando existe varios acessos com o mesmo usuario o .net cria.. digamos uma conexao em cache com todas as informacoes necessarias para a conexao com o banco.. evitando assim todo o processo de validacao do que o banco faz.

    Entao minha opiniao seria utilize quando necessario, porem com moderacao tente utilizar os recursos que o .net disponibiliza como armazenamento em memoria, cache evitando assim a conexoes desnecessarias.


    se a resposta foi útil, classifique :)
    ate mais,

    Rodrigo Soria
    quarta-feira, 22 de dezembro de 2010 01:02
  • Miguel,

    o correto é abrir somente quando necessário e fechar o mais rápido possível, assim que terminar seu uso.


    Ricardo Oneda Blog de Ricardo Oneda Perfil de Ricardo Oneda no Twitter Perfil MVP de Ricardo Oneda
    quarta-feira, 22 de dezembro de 2010 13:02
    Moderador

Todas as Respostas

  • Miguel,

    A acao de open/close de conexao é um dos processos mais demorados que existe.

    Mais a Microsoft pensou nisso e criou um esquema de pool de conexao, ou seja, quando existe varios acessos com o mesmo usuario o .net cria.. digamos uma conexao em cache com todas as informacoes necessarias para a conexao com o banco.. evitando assim todo o processo de validacao do que o banco faz.

    Entao minha opiniao seria utilize quando necessario, porem com moderacao tente utilizar os recursos que o .net disponibiliza como armazenamento em memoria, cache evitando assim a conexoes desnecessarias.


    se a resposta foi útil, classifique :)
    ate mais,

    Rodrigo Soria
    quarta-feira, 22 de dezembro de 2010 01:02
  • Como funciona esse pool de conexão.

    A minha conexão eu faço da seguinte forma:

    Public BDMain As New ADODB.Connection 
    Public RS As New ADODB.Recordset
    
    BDMain.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & CAMINHO DO BANCO DE DADOS & ";Persist Security Info=True;Jet OLEDB:Database Password="
    
    BDMain.Open()
    INSTRUÇÕES PARA O RS
    BDMain.Close()
    

    quarta-feira, 22 de dezembro de 2010 12:57
  • Miguel,

    o correto é abrir somente quando necessário e fechar o mais rápido possível, assim que terminar seu uso.


    Ricardo Oneda Blog de Ricardo Oneda Perfil de Ricardo Oneda no Twitter Perfil MVP de Ricardo Oneda
    quarta-feira, 22 de dezembro de 2010 13:02
    Moderador
  • Na realidade hoje eu tenho um módulo que tenho funções e procedimentos para fazer a abertura e fechamento do meu banco de dados access.

    Eu gostaria de transferir esse procedimento para classe.

    No módulo eu tenho o seguinte:

    Public Caminhosis As String 'ARMAZENA O CAMINHO DO BANCO DE DADOS PRINCIPAL
    Public BDMain As New ADODB.Connection 'Conexão com o Banco Principal
    Public RS As New ADODB.Recordset
    
      Public Sub CarregaCaminho()
        If Not File.Exists(My.Application.Info.DirectoryPath & "\Arquivos\Mc.mdb") Then
          msgbox "caminho não localizado"
          End
        Else
          BD.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & My.Application.Info.DirectoryPath & "\Arquivos\Mc.mdb" & ";Persist Security Info=True;Jet OLEDB:Database Password="
          BD.Open()
          sql = "SELECT * FROM sistema_tblCaminhos WHERE ID=1"
          RS.Open(sql, BD, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic)
          Caminhosis = RS("bdSis").Value.ToString
          RS.Close()
          BD.Close()
        End If
      End Sub
    
      Public Sub fecharBDMain()
        If BDMain.State = ConnectionState.Open Then
          BDMain.Close()
        End If
      End Sub
    
    Public Sub abrirBDMain() Try If BDMain.State = ConnectionState.Closed Then BDMain.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & Caminhosis & "\mcSis.mdb;Persist Security Info=True;Jet OLEDB:Database Password=nnocxam" BDMain.Open() Else BDMain.Close() BDMain.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & Caminhosis & "\mcSis.mdb;Persist Security Info=True;Jet OLEDB:Database Password=nnocxam" BDMain.Open() End If Catch ex As Exception MsgBox("Erro no acesso a fonte de dados principal.") End End Try End Sub

    Ai toda vez que eu uso dentro de um dos meu códigos eu faço da seguinte forma:

    abrirBDMain
    RS.Open("SELECT * FROM * WHERE *=*", BDMain, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic)
    WHILE NOT RS.EOF
         'AÇÕES
    END WHILE
    RS.CLose
    fecharBDMain

    quarta-feira, 22 de dezembro de 2010 16:06
  • Deu pra entender ?

    Qual e o seu problema Miguel?

    Voce quer passar pra class, tu estas a usar VB.NET?

    Existe muita informacao de como fazer isto.

     


    Just Be Humble Malange!
    quarta-feira, 22 de dezembro de 2010 20:07
    Moderador
  • Olá Miguel!!!

    Pra mim não ficou muito claro sua dúvida Miguel.

    Seria somente para passar o código p/ uma classe e trabalhar fazendo as chamadas no form principal?

    Att;

     


    Eder Costa - LATAM Forum Support Engineer
    Microsoft Corporation
    quarta-feira, 29 de dezembro de 2010 11:11
    Moderador