AJUDA COM CONEXAO CLOSE MYSQL
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
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
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
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
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
Opa vlw nao sabia desse finally
Se o problema foi resolvido, por favor, encerre o tópico.
Se o problema foi resolvido, por favor, encerre o tópico. (2x) Jaba!
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...
Como faco para apos ele efetuar a sub ele de um kill nesta conexao ao inves de deixar ela em sleep...
up....
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.
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.
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..
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..
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..
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.
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.
Tópico encerrado , respostas não são mais permitidas