none
Retorno de metodo RRS feed

  • Pergunta

  • Pessoal,

    Tenho um metodo que executa um reader e deve retorna-lo pra quem o chamou:

     

    public SqlDataReader ExecuteReader()
            {
                SqlDataReader reader = null;

                try
                {
                    this.Open();
                    reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    this.Close();
                }
                return reader;
            }

     

    Acontece que como ele passa no finally antes de retornar  o resultado, o finally fecha a conexao e o reader se perde.

    Se coloco o return dentro do bloco try, ele retornara o valor mas mantera a conexao aberta.

    Como resolvo isso ?

     

    segunda-feira, 26 de setembro de 2011 17:48

Respostas

  • Tudo bem. E este dataReader vai ser retornado para onde?

    Te recomendo utilizar as classe SQLHelper que já existe no Data Access Application Blocks : http://social.msdn.microsoft.com/Forums/pt-BR/webgeralpt/thread/4d73e07c-c268-4b69-a86d-22ddc52b17d3


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    segunda-feira, 26 de setembro de 2011 19:10

Todas as Respostas

  • Para que você quer fazer isso?

    Veja que a conexão está sendo fechada em dois momentos:

    .CloseConnection e no finally.

     

    Eu acho melhor você passar a conexão para o método, executar o reader (ExecuteReader()) e retornar o mesmo em seguida. Feche a conexão no método que você chama o reader... mas que acho isso ai esquisito Eu acho.


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    segunda-feira, 26 de setembro de 2011 17:56
  • Vc esta me dizendo que na primeira parte "CloseConnection" ele ja fecha apos a execucao ?

    Entao eu nao precisaria do finally ?

    Mas ainda assim eu nao conseguiria o retorno certo ?

    segunda-feira, 26 de setembro de 2011 18:06
  • Na verdade Eu errei no que escrevi. Quando você faz CommandBehavior.CloseConnection você diz que  a conexão vai ser fechada quando o seu objeto DataReader for encerrado. Então precisa "fechar" o dataReader (seuDataReader.Close).

    Para o seu caso penso em algo +- assim:

        public SqlDataReader ExecutarSqlDataReader(SqlDataReader reader, SqlCommand cmd, SqlConnection con)
        {
            if (con.State == ConnectionState.Open)
            {
                con.Open();
            }
    
            reader = cmd.ExecuteReader();
            return reader;
        }
    



    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    segunda-feira, 26 de setembro de 2011 18:19
  • O problema é q estou utilizando desenvolvimento em camadas.

     

    A Dal abre a conexao, executa o command, retorna o resultado e fecha a conexao.
    Entao esse resultado volta para quem o chamou.

    Acontece que aqui, ele ou volta o resultado pra quem chamou e mantem a conexao aberta ou fecha a conexao e nao retorna os dados.

    segunda-feira, 26 de setembro de 2011 18:57
  • Tudo bem. E este dataReader vai ser retornado para onde?

    Te recomendo utilizar as classe SQLHelper que já existe no Data Access Application Blocks : http://social.msdn.microsoft.com/Forums/pt-BR/webgeralpt/thread/4d73e07c-c268-4b69-a86d-22ddc52b17d3


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    segunda-feira, 26 de setembro de 2011 19:10