Usuários experientes geralmente reaproveitam muito código-fonte já
escrito anteriormente.
Isso ajuda a compor novos aplicativos e a criar mais rapidamente novas necessidades.
Quando falamos de ASP.NET, no entanto, há uma pequena regra a ser seguida e que
os usuários menos experientes podem acabar esbarrando pelo caminho.
Essa regra é: Em ASP.NET nunca crie o mesmo connection para outras aplicações ou dentro da mesma aplicação e sempre que abrir um connection trate de fechá-lo no final de sua utilização.
Digamos que você crie uma pequena aplicação e faça o código abaixo:
Dim myCommand As MySqlCommand
Dim myConnection As MySqlConnection
myConnection = New MySqlConnection("server=252.168.70.99; user id=root; password=1007; database=alianca; pooling=false;")
myConnection.Open()
sSQL = "UPDATE registraprod SET CORRIGIDO = '" & sCorreto & "', HORACORRECAO = '" & sHora & "', DATA = '" & sInicio & "', POSICAO = '" & sPosicao & "', LOCALFALHA = '" & sLocalFalha & "', TIPOFALHA = '" & sTipoFalha & "', REPARADOR = '" & TxtReparador.Text & "' " & _
" WHERE CODBARRAS = '" & TxtBarras.Text & "' AND PRODUTO = '" & sProd & "'"
myCommand = New MySqlCommand(sSQL, myConnection2IM)
dsY = myCommand.ExecuteReader
Em seguida, em outro form ou em um botão dentro do mesmo form, crie a mesma conexão para realizar uma consulta:
Dim myCommand As MySqlCommand
Dim myConnection As MySqlConnection
myConnection = New MySqlConnection("server=252.168.70.99; user id=root; password=1007; database=alianca; pooling=false;")
myConnection.Open()
sSQL = "Selct * from registraprod " & _
" WHERE CODBARRAS = '" & TxtBarras.Text & "' AND PRODUTO = '" & sProd & "'"
myCommand = New MySqlCommand(sSQL, myConnection2IM)
dsY = myCommand.ExecuteReader
Em tempo de projeto - na sua máquina, não há problemas. Mas este mesmo código-fonte em locais distintos publicado no servidor ASP.NET poderá gerar concorrência e haverá erros quando dois usuários acessarem o mesmo ponto de sua aplicação.
Veja que em nenhum momento há o fechamento da conexão e que as duas se encontram com o mesmo nome!
Em uma base de dados MySQL isso causará erro de conexão abertas em demasia.
Também com uma base de dados SQL Server esta não é uma boa prática de programação.
Para corrigir este problema, poderíamos fazer o seguinte:
'Alteração
Dim myCommandupdate As MySqlCommand
Dim myConnectionUpdate As MySqlConnection
myConnectionUpdate = New MySqlConnection("server=252.168.70.99; user id=root; password=1007; database=alianca; pooling=false;")
myConnection.Open()
sSQL = "UPDATE registraprod SET CORRIGIDO = '" & sCorreto & "', HORACORRECAO = '" & sHora & "', DATA = '" & sInicio & "', POSICAO = '" & sPosicao & "', LOCALFALHA = '" & sLocalFalha & "', TIPOFALHA = '" & sTipoFalha & "', REPARADOR = '" & TxtReparador.Text & "' " & _
" WHERE CODBARRAS = '" & TxtBarras.Text & "' AND PRODUTO = '" & sProd & "'"
myCommandupdate = New MySqlCommand(sSQL, myConnectionUpdate )
dsY = myCommandupdate .ExecuteReader
myConnectionUpdate.Close()
'Seleção
Dim myCommandSelect As MySqlCommand
Dim myConnectionSelect As MySqlConnection
myConnectionSelect = New MySqlConnection("server=252.168.70.99; user id=root; password=1007; database=alianca; pooling=false;")
myConnection.Open()
sSQL = "Selct * from registraprod " & _
" WHERE CODBARRAS = '" & TxtBarras.Text & "' AND PRODUTO = '" & sProd & "'"
myCommandSelect = New MySqlCommand(sSQL, myConnectionSelect )
dsY = myCommandSelect .ExecuteReader
myConnectionSelect .Close()
Identificamos assim as conexões de modo distinto e realizamos o fechamento das mesmas após a sua atualizaçao.
Essa boa prática evita a concorrência e faz com que você não tenha problemas em duas máquinas utilizando a sua aplicação e causando travamentos.
Sucesso a todos!
By
Leonardo Metelys