euventura 0 Denunciar post Postado Junho 17, 2008 gente, uso essa classe pra acesso ao banco. o problema é que ela cria infinitas conexões e nao fecha dando overload no bd. qual o erro da minha classe? como faço pra ela fechar as conexões? segue a classe abaixo... CODE Imports Microsoft.VisualBasic Imports System.Data.SqlClient Public Class AcessoDados Public Function ExecuteReader(ByVal Conn As String, _ ByVal sqlType As System.Data.CommandType, _ ByVal stQuery As String, _ Optional ByVal obParam() As SqlParameter = Nothing) As SqlDataReader Dim obCon As New SqlConnection Dim obCommand As New SqlCommand obCon.ConnectionString = Conn obCommand.Connection = obCon obCommand.CommandType = sqlType obCommand.CommandText = stQuery If Not IsNothing(obParam) Then For X As Int32 = 0 To obParam.Length - 1 obCommand.Parameters.Add(obParam(X)) Next End If Try obCon.Open() Return obCommand.ExecuteReader Catch ex As Exception Return Nothing End Try End Function Public Function ExecuteScalar(ByVal Conn As String, _ ByVal sqlType As System.Data.CommandType, _ ByVal stQuery As String, _ Optional ByVal obParam() As SqlParameter = Nothing) As String Dim obCon As New SqlConnection Dim obCommand As New SqlCommand obCon.ConnectionString = Conn obCommand.Connection = obCon obCommand.CommandType = sqlType obCommand.CommandText = stQuery If Not IsNothing(obParam) Then For X As Int32 = 0 To obParam.Length - 1 obCommand.Parameters.Add(obParam(X)) Next End If Try obCon.Open() Return obCommand.ExecuteScalar() Catch ex As Exception Return ex.ToString End Try End Function Public Sub ExecuteNonQuery(ByVal Conn As String, _ ByVal sqlType As System.Data.CommandType, _ ByVal stQuery As String, _ Optional ByVal obParam() As SqlParameter = Nothing) Dim obCon As New SqlConnection Dim obCommand As New SqlCommand obCon.ConnectionString = Conn obCommand.Connection = obCon obCommand.CommandType = sqlType obCommand.CommandText = stQuery If Not IsNothing(obParam) Then For X As Int32 = 0 To obParam.Length - 1 obCommand.Parameters.Add(obParam(X)) Next End If Try obCon.Open() obCommand.ExecuteNonQuery() obCon.close() Catch ex As Exception End Try End Sub End Class Compartilhar este post Link para o post Compartilhar em outros sites
pedro.wtf 0 Denunciar post Postado Junho 17, 2008 Manjo nada de VB, mas pelo o que eu ví você não fecha suas conexões. Em C# seria algo como try { conexao.Open(); fazAsBagaças(); ... } catch(Exception ex) { trataOErro(); } finally { conexao.Close(); } Assim, independentemente do sucesso ou não na operação do banco, a conexão será finalizada sempre. É também possível utilizar o comando using, mas eu nunca lembro a sintaxe! Compartilhar este post Link para o post Compartilhar em outros sites
euventura 0 Denunciar post Postado Junho 17, 2008 entao, eu uso o objeto sqlDatereader, que nao funciona com conexão fechada. e fora do escopo nao tenho como fechar. Compartilhar este post Link para o post Compartilhar em outros sites
pedro.wtf 0 Denunciar post Postado Junho 17, 2008 entao, eu uso o objeto sqlDatereader, que nao funciona com conexão fechada. e fora do escopo nao tenho como fechar. Tudo bem, mas você não precisa fechar a conexão antes de usar o DataReader, por exemplo, no seu código eu achei o seguinte Try obCon.Open() Return obCommand.ExecuteReader ... Isso significa que ele entrará no try, abrirá a conexão e retornará um DR, SEM FECHAR a conexão, isto é errado! O certo seria algo como DataReader dr; try { open()... dr = blablabla.ExecuteReader(); ... } catch(blablablabla) { ... } finally { close(); } return dr; ... Claro que você terá que verificar se o dr foi realmente populado, etc, mas o esqueleto básico é esse. Compartilhar este post Link para o post Compartilhar em outros sites
euventura 0 Denunciar post Postado Junho 17, 2008 opaa.. vlww.. vou tentar já posto =) Compartilhar este post Link para o post Compartilhar em outros sites
euventura 0 Denunciar post Postado Junho 17, 2008 nao funcionou. deu o mesmo erro de conexão fechada. Invalid attempt to call FieldCount when reader is closed. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.InvalidOperationException: Invalid attempt to call FieldCount when reader is closed. Compartilhar este post Link para o post Compartilhar em outros sites
pedro.wtf 0 Denunciar post Postado Junho 17, 2008 Poste o código atualizado. Compartilhar este post Link para o post Compartilhar em outros sites
sublyer 0 Denunciar post Postado Junho 17, 2008 Coloque o resultado da execução em um data table e então feche a conexão. Temos aqui no fórum uma classe de conexão que tu pode verificar como fazemos. Da uma olhada neste link http://forum.imasters.com.br/index.php?showtopic=261619 Flwww, grande abraço Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Junho 19, 2008 Outra coisa que eu costumo fazer é criar uma função a parte somente para fechar a conexão, desta forma, chamo ela após utilizar o DataReader. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites