ASP.NET - EVITANDO CONCORRÊNCIA NAS CONEXÕES
Autor: I love Helle Berry. | Publicado: 2013-03-23T10:01:00-07:00


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.&nbsp;

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 = '" &amp; sCorreto &amp; "', HORACORRECAO = '" &amp; sHora &amp; "', DATA = '" &amp; sInicio &amp; "', POSICAO = '" &amp; sPosicao &amp; "', LOCALFALHA = '" &amp; sLocalFalha &amp; "', TIPOFALHA = '" &amp; sTipoFalha &amp; "', REPARADOR = '" &amp; TxtReparador.Text &amp; "' " &amp; _
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" WHERE CODBARRAS = '" &amp; TxtBarras.Text &amp; "' AND PRODUTO = '" &amp; sProd &amp; "'"


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 " &amp; _

&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" WHERE CODBARRAS = '" &amp; TxtBarras.Text &amp; "' AND PRODUTO = '" &amp; sProd &amp; "'"





myCommand = New MySqlCommand(sSQL, myConnection2IM)

dsY = myCommand.ExecuteReader



Em tempo de projeto - na sua máquina, não há problemas. &nbsp;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!&nbsp;

Em uma base de dados MySQL isso causará erro de conexão abertas em demasia.&nbsp;
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&nbsp;= New MySqlConnection("server=252.168.70.99; user id=root; password=1007; database=alianca; pooling=false;")

myConnection.Open()



sSQL = "UPDATE registraprod SET CORRIGIDO = '" &amp; sCorreto &amp; "', HORACORRECAO = '" &amp; sHora &amp; "', DATA = '" &amp; sInicio &amp; "', POSICAO = '" &amp; sPosicao &amp; "', LOCALFALHA = '" &amp; sLocalFalha &amp; "', TIPOFALHA = '" &amp; sTipoFalha &amp; "', REPARADOR = '" &amp; TxtReparador.Text &amp; "' " &amp; _

&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" WHERE CODBARRAS = '" &amp; TxtBarras.Text &amp; "' AND PRODUTO = '" &amp; sProd &amp; "'"





myCommandupdate&nbsp;= New MySqlCommand(sSQL,&nbsp;myConnectionUpdate&nbsp;)

dsY =&nbsp;myCommandupdate&nbsp;.ExecuteReader


myConnectionUpdate.Close()


'Seleção
Dim myCommandSelect As MySqlCommand


Dim myConnectionSelect As MySqlConnection

myConnectionSelect&nbsp;= New MySqlConnection("server=252.168.70.99; user id=root; password=1007; database=alianca; pooling=false;")

myConnection.Open()



sSQL = "Selct * from registraprod " &amp; _

&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" WHERE CODBARRAS = '" &amp; TxtBarras.Text &amp; "' AND PRODUTO = '" &amp; sProd &amp; "'"





myCommandSelect&nbsp;= New MySqlCommand(sSQL,&nbsp;myConnectionSelect&nbsp;)

dsY =&nbsp;myCommandSelect&nbsp;.ExecuteReader

myConnectionSelect&nbsp;.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.&nbsp;

Sucesso a todos!


By
Leonardo Metelys