MANIPULA?ÃO B?SICA DE DADOS.
Pessoal, para fazer consultas com datareader, a sequência abaixo esta correta ? ( em um módulo tenho a conexão com o BD, e alguns datareader e sqlcommand declarados), a dúvida é se posso deixar declarados no módulo, e ir abrindo e fechando nas demais telas, e se o modo de fechar esta correto, usando o dispose só na cnn, no datareader, apenas close. é isso mesmo ?, não tem risco de prender tabelas no banco ?
abre_conexão
Sql = [Ô]select codigo,razao,cgc,loc,certserial,ambiente from empresas where codigo=[Ô] & CDbl(Mid(Me.cmbempresas.Text, 1, 2)) & [Ô] [Ô]
Sqlcmd = New SqlCommand(Sql, Cnn)
Dremp = Sqlcmd.ExecuteReader
....
.....
Dremp.close
Cnn.close
cnn.dispose
outro exemplo. Com executenonquery() não tenho disponÃvel o close, estou usando o dispose, é isso mesmo ?
abre_conexão
Sqlcmd3 = New SqlCommand([Ô]update envio set st_env=[ô]2[ô] where idenv = [ô][Ô] & wscodenv & [Ô][ô][Ô], Cnn)
Sqlcmd3.ExecuteNonQuery()
sqlcmd3.dispose
Cnn.close
cnn.dispose
abre_conexão
Sql = [Ô]select codigo,razao,cgc,loc,certserial,ambiente from empresas where codigo=[Ô] & CDbl(Mid(Me.cmbempresas.Text, 1, 2)) & [Ô] [Ô]
Sqlcmd = New SqlCommand(Sql, Cnn)
Dremp = Sqlcmd.ExecuteReader
....
.....
Dremp.close
Cnn.close
cnn.dispose
outro exemplo. Com executenonquery() não tenho disponÃvel o close, estou usando o dispose, é isso mesmo ?
abre_conexão
Sqlcmd3 = New SqlCommand([Ô]update envio set st_env=[ô]2[ô] where idenv = [ô][Ô] & wscodenv & [Ô][ô][Ô], Cnn)
Sqlcmd3.ExecuteNonQuery()
sqlcmd3.dispose
Cnn.close
cnn.dispose
Utilize o USING.
www.macoratti.net/vbn5_dpo.htm
www.macoratti.net/vbn5_dpo.htm
Além da dica do JABA, use comandos parametrizados e não concatenação.
OK, só não estou usando o using, mas abro a conexão e fecho a cada acesso a dados. Fiquei em dúvida porque em algum ponto, ficou prendendo o banco. Este app compartilha o banco sql server com um app de gestão em vb6, e no vb6 é que prendeu, não consegui fazer update em uma tabela, somente após sair do app em vb.net. Pelo que entendi, o datareader é só leitura né ?, talvez algum executenonquery() tenha prendido. Mas ja estou revisando.
Se usar os blocos using para todos os objetos descartáveis, você não terá mais esse problema de [Ô]trancar[Ô]. O que tranca, não é a aplicação mas sim o GAC
Não sei o que é o GAC, vou pesquisar sobre, e já estou readequando o using.
Muito obrigado...
Muito obrigado...
Não esqueça de parametrizar as queries também. Concatenação de valores é uma falha catastrófica.
Tópico encerrado , respostas não são mais permitidas