sábado, 23 de março de 2013

ASP.NET - EVITANDO CONCORRÊNCIA NAS CONEXÕES


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

UM APLICATIVO PARA LEITURA DEVOCIONAL ANUAL DA BIBLIA EM ANDROID

Olá, pessoal!  Este novo projeto foi criado em Visual Studio 2019 em C#.Net com o Xamarin. Já está disponível no Google Play para vocês baix...