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]
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!
[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.
[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.