none
Classe de Acesso RRS feed

  • Pergunta

  • Olá,

    Tenho uma aplicação com problemas no pool de conexões. Consultando sites , vi que a maioria deles sugerem o uso do "using " nas classes de acesso a banco de dados. Problema : eu já utilizava em todos os "SqlCommand" , "SqlDataAdapter. Porém , tenho um classe isolada de acesso :

                   

    public class AcessoDll
        {
           public SqlConnection oconexao = null;
           public void CriaConexao(String conn)
           {
               oconexao = new SqlConnection(conn);
               if (oconexao.State == 0)
               {  
                       oconexao.Open();
               }

       }
         }

    Acontece que se eu colocar o "using" na linha  "oconexao = new SqlConnection(conn)" , tenho retorno de msg de conexao fechada , no proximo metodo de login :

        using (SqlCommand ocomando = new SqlCommand(sb.ToString(), oconexao))
                {...
                    SqlDataReader dr;
                    dr = ocomando.ExecuteReader(CommandBehavior.CloseConnection);
                    dr.Read();
                    if (dr.HasRows)..............................     NÃO CONSIGO ENTENDER O PORQUÊ ?????? 


    sexta-feira, 31 de agosto de 2012 14:42

Respostas

  • Se voce está colocando o using nesa parte

    ...
    using(oconexao = new SqlConnection(conn)){      
         if (oconexao.State == 0)    
           {                    
     oconexao.Open(); 
           }
    }
    ...

    Quando "passar" o código do bloco using, ele vai fechar a conexão e dar um dipose!

    Por isso voce está recebendo esta mensagem.

    o que pode ser feito é:

    private string connectionString = "....";
    public SqlConnection CriaConexao()  {           
    var __conn = new SqlConnection(connectionString);         
      if (oconexao.State == ConnectionState.Closed)           {
                      __conn.Open();
               }   
    return _conn;   
    
    }

    e então

    using(SqlConnection oconexao = CriaConexao())
    using (SqlCommand ocomando = new SqlCommand(sb.ToString(), oconexao))            
    {
    ...                
    SqlDataReader dr;                
    dr = ocomando.ExecuteReader(CommandBehavior.CloseConnection);
    if (dr.HasRows)
    dr.Read();                

    Até mais!

    Se for útil marque como resposta (:


    • Editado Willian Arsenio sexta-feira, 31 de agosto de 2012 19:30
    • Marcado como Resposta ZoroButtowi sexta-feira, 31 de agosto de 2012 21:04
    sexta-feira, 31 de agosto de 2012 19:29

Todas as Respostas

  • Se voce está colocando o using nesa parte

    ...
    using(oconexao = new SqlConnection(conn)){      
         if (oconexao.State == 0)    
           {                    
     oconexao.Open(); 
           }
    }
    ...

    Quando "passar" o código do bloco using, ele vai fechar a conexão e dar um dipose!

    Por isso voce está recebendo esta mensagem.

    o que pode ser feito é:

    private string connectionString = "....";
    public SqlConnection CriaConexao()  {           
    var __conn = new SqlConnection(connectionString);         
      if (oconexao.State == ConnectionState.Closed)           {
                      __conn.Open();
               }   
    return _conn;   
    
    }

    e então

    using(SqlConnection oconexao = CriaConexao())
    using (SqlCommand ocomando = new SqlCommand(sb.ToString(), oconexao))            
    {
    ...                
    SqlDataReader dr;                
    dr = ocomando.ExecuteReader(CommandBehavior.CloseConnection);
    if (dr.HasRows)
    dr.Read();                

    Até mais!

    Se for útil marque como resposta (:


    • Editado Willian Arsenio sexta-feira, 31 de agosto de 2012 19:30
    • Marcado como Resposta ZoroButtowi sexta-feira, 31 de agosto de 2012 21:04
    sexta-feira, 31 de agosto de 2012 19:29
  • Opa , legal Willian ,

    Então , do jeito que eu estava fazendo , eu não estava fechando a conexao?

    Eu estava correndo o risco de "excesso de acessos" ???

    Eu estava tendo problemas com o pool de conexões , isso será que resolve?

    Obrigado 

    sexta-feira, 31 de agosto de 2012 21:06
  • Mas William , continuo sem poder usar o using no SQLConnection ? agora q reparei ..
    sexta-feira, 31 de agosto de 2012 21:17