[RESOLVIDO]Fechar Conexão de um DataReader retornado em uma função

Pessoal, boa tarde.

Eu estou trabalhando com um web service e tenho uma classe que se comunica com meu banco de dados.
Eu tenho a função abaixo que faz um retorno de um DataReader que eu utilizo nos métodos de meu web service.

Como eu poderia fechar as conexões deixadas por eles?
Eu já tentei utilizar Using, utilizar o Finally.
Mas não dá certo, pois como eu faço o retorno do DataReader se eu fechar a conexão eu não consigo utilizá-lo no método do web service.

[code] Public Shared Function execSelect(ByVal tabela As String, ByVal campos As String, ByVal condicao As String) As SqlClient.SqlDataReader
Dim comm As System.Data.SqlClient.SqlCommand
Dim myReader As Data.SqlClient.SqlDataReader = Nothing
Dim comando As String

    comando = "SELECT " & campos & " FROM " & tabela & IIf(condicao <> "", " WHERE " & condicao, "")
    comm = New SqlClient.SqlCommand(comando, ConectaBanco)
    Try
        myReader = comm.ExecuteReader()
    Catch ex As Exception
        myReader = Nothing
        Return Nothing
    End Try
    If myReader.Read() Then
        Return myReader
    Else
        myReader.Close()
        Return Nothing
    End If
End Function[/code]

Obrigado desde já.

Opa, aboult, beleza?
Já pensou na ideia de retornar uma coleção com os dados de seu DataReader?
Se você fecha a conexão a qual o DataReader está atrelado, você perde a “ligação” dele com o banco de dados.
Porque não, ao invés de retornar um DataReader, você não retorna uma coleção de dados?
Eu, particularmente, faço isso!

Espero ter ajudado,
fique com Deus! :smiley:

[quote=Nicolas Fernandes]Opa, aboult, beleza?
Já pensou na ideia de retornar uma coleção com os dados de seu DataReader?
Se você fecha a conexão a qual o DataReader está atrelado, você perde a “ligação” dele com o banco de dados.
Porque não, ao invés de retornar um DataReader, você não retorna uma coleção de dados?
Eu, particularmente, faço isso!

Espero ter ajudado,
fique com Deus! :D[/quote]

É acabei resolvendo no mesmo dia dessa forma, só consegui fazer dessa maneira.

Obrigado pela atenção.

[quote=aboult][quote=Nicolas Fernandes]Opa, aboult, beleza?
Já pensou na ideia de retornar uma coleção com os dados de seu DataReader?
Se você fecha a conexão a qual o DataReader está atrelado, você perde a “ligação” dele com o banco de dados.
Porque não, ao invés de retornar um DataReader, você não retorna uma coleção de dados?
Eu, particularmente, faço isso!

Espero ter ajudado,
fique com Deus! :D[/quote]

É acabei resolvendo no mesmo dia dessa forma, só consegui fazer dessa maneira.

Obrigado pela atenção.[/quote]
Concorda que, retornando um DataReader para as camadas superiores, seu sistema fica MUITO acoplado e nada coeso? Quem tem a responsabilidade de trabalhar com o acesso a dados é a camada ADO, DAO ou seja lá como você conhece. Se você retorna seu DataReader para as camadas acima, você acaba acoplando o seu sistema. Suas classes superiores, ao trabalharem também com o DataReader, também não fica coesas. Think about it.

Coloque a tag [RESOLVIDO] no seu tópico.
Fique com Deus!

Obrigado pela atenção.[/quote]
Concorda que, retornando um DataReader para as camadas superiores, seu sistema fica MUITO acoplado e nada coeso? Quem tem a responsabilidade de trabalhar com o acesso a dados é a camada ADO, DAO ou seja lá como você conhece. Se você retorna seu DataReader para as camadas acima, você acaba acoplando o seu sistema. Suas classes superiores, ao trabalharem também com o DataReader, também não fica coesas. Think about it.

Coloque a tag [RESOLVIDO] no seu tópico.
Fique com Deus![/quote]

É tem toda razão, o sistema ficava todo preso e eu não conseguia controlar a conexão corretamente.
Com isso eu estava estourando o MaxPoolSize.

Obrigado pelas orientações. Amém, vc tbm.