Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

euventura

Problemas com classe de banco de dados

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.