AJUDA COM CONEXAO CLOSE MYSQL

KURTGU 25/11/2014 17:50:25
#442770
Pessoal vi aqui em outro topico um comando para verificar as conexoes abertas ate ai tudo bem, gostaria de saber o seguinte por que, mesmo eu pedindo para a conexao ser fechada com ela continua aparecendo aberta..Segue abaixo uma sub que uso...no momento... Mesmo eu usando o Desconectar no final da sub ele continua aparecendo como conectado...


Public Sub Connectar() [ô]Conecta no MySQL
Try
myconexao = New MySql.Data.MySqlClient.MySqlConnection([Ô]server=[Ô] & Host & [Ô];user id=[Ô] & Usuario & [Ô];password=[Ô] & Senha & [Ô];database=[Ô] & DataBase)
myconexao.Open()
Catch ex As Exception
MsgBox([Ô]Erro de Conexao Com o Servidor Tente Novamente Mais Tarde...[Ô])
Application.Exit()
End Try
End Sub

Public Sub Desconnectar() [ô]Desconecta do MySQL
Try
myconexao.Close()
Catch ex As Exception
End Try
End Sub

#End Region


Public Sub TesteConexao() [ô]Conecta no MySQL
Try
myconexao = New MySql.Data.MySqlClient.MySqlConnection([Ô]server=[Ô] & Host & [Ô];user id=[Ô] & Usuario & [Ô];password=[Ô] & Senha & [Ô];database=[Ô] & DataBase)
myconexao.Open()
Load.Label4.Text = [Ô]OK[Ô]
load.Label4.Visible = True
load.Label4.ForeColor = Color.Lime
load.Timer2.Start()
load.Timer2.Enabled = True

Catch ex As Exception
Load.Label4.Visible = True
Load.Label4.Text = [Ô]Erro[Ô]
load.Label4.ForeColor = Color.Red
End Try
Desconnectar()
End Sub
End Module
JABA 25/11/2014 19:06:30
#442771
Se sua rotina estiver dando erro em algum lugar, o codigo para desconectar não será chamado, pois o catch capiturará o erro antes.
Sendo assim, utilize um Finally pra ver se funciona.

Public Sub TesteConexao() [ô]Conecta no MySQL
Try
myconexao = New MySql.Data.MySqlClient.MySqlConnection([Ô]server=[Ô] & Host & [Ô];user id=[Ô] & Usuario & [Ô];password=[Ô] & Senha & [Ô];database=[Ô] & DataBase)
myconexao.Open()
Load.Label4.Text = [Ô]OK[Ô]
load.Label4.Visible = True
load.Label4.ForeColor = Color.Lime
load.Timer2.Start()
load.Timer2.Enabled = True

Catch ex As Exception
Load.Label4.Visible = True
Load.Label4.Text = [Ô]Erro[Ô]
load.Label4.ForeColor = Color.Red
Finally
Desconnectar()
End Try
End Sub
MESTRE 26/11/2014 10:28:43
#442780
Faça como o Jaba falou eu faço assim

   Try

objConexao.Open()

BLBLABLABLBLA SEU CODIGO SELECT


Catch ex As Exception
MsgBox([Ô]ERRO ENCONTRADO REPORTAR AO TI![Ô], MsgBoxStyle.Critical)
MessageBox.Show([Ô]Ocorreu um erro: [Ô] & ex.ToString)
Finally
objConexao.Close()
End Try
KURTGU 26/11/2014 12:25:08
#442783
Opa vlw nao sabia desse finally
JABA 26/11/2014 14:36:59
#442789
Se o problema foi resolvido, por favor, encerre o tópico.
MOUSER 26/11/2014 17:15:41
#442799
Se o problema foi resolvido, por favor, encerre o tópico. (2x) Jaba!
KURTGU 26/11/2014 19:47:00
#442804
Pessoal mesmo eu fazendo da forma que me foi passado quando efetuo a consulta aparece como se a conexao estivesse adormecida segue em anexo abaixo...
Como faco para apos ele efetuar a sub ele de um kill nesta conexao ao inves de deixar ela em sleep...


KURTGU 12/12/2014 03:49:48
#443163
up....
OCELOT 12/12/2014 11:09:52
#443171
Isso é provavelmente devido ao Connection Pooling.

Quando se fecha uma conexão ela na verdade vai ser adaicionada a um pool de conexões disponíveis, quando o programa tentar abrir uma nova conexão ele primeiro verifica se ja tem alguma no pool, se sim então ele usa esta que já está aberta para tornar o processo mais rápido.

E é por isso também que é recomendado sempre abrir e fechar as conexões sempre que forem usadas, pois assim na verdade você pode estar usando apenas uma conexão o tempo todo. Dependendo de como foi implementado é bem provavel que esta conexão seja fechada automaticamente caso o programa não a use por um certo tempo.
MESTRE 15/12/2014 08:29:49
#443207
Engraçado aqui não tive problema com isso ainda... graças a deus hahah.. estou acompanhando o topico pq nunca sabemos o dia de amanhã..

mas engraçado ele perder a conexão..

Citação:

Dependendo de como foi implementado é bem provavel que esta conexão seja fechada automaticamente caso o programa não a use por um certo tempo.



Como assim dependendo de como foi implementado? por ex eu abro e fecho o banco sempre e até agora não tive problema com isso..

OCELOT 15/12/2014 09:48:38
#443212
Não como você fez, eu quis dizer que dependendo de como o conector do mysql foi feito ele deve fechar ela sozinha depois de um tempo sem uso, o connection pooling é implementado no conector do banco de dados, como não sei como ele foi feito pode ser que ele resolva deixar um certo número de conexões sempre abertas, pode ser que feche se ficar um tempo sem uso.

Eu diria que se você abre e fecha a conexão várias vezes e sempre tem só uma aberta então não tem problema, o problema vai ser se enquanto estiver usando o programa mais e mais conexões forem ficando abertas, se quiser mesmo testar eu diria para você abrir o seu programa e abrir uma série de telas diferentes que acessam o banco de dados, fazendo algumas operações de inserção e edição por exemplo, dai você ve quantas conexões ficaram abertas, então sem fechar o programa repete o processo e ve se aumentaram as conexões, se cada vez que você fizer o processo elas aumentarem então você tem um problema de conexões não fechadas, se elas se mantiverem sempre com a mesma quantidade de conexões então provavelmente é o pool de conexões.
Página 1 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas