Jump to content
Fórum Script Brasil
  • 0

Erro dizendo que não fexei a conexão


Gustavo Ricardo

Question

Pessoal estou desenvolvendo um programa para uma biblioteca em vb.net e sql 2008

ai estou fazendo a tela de devolução de livros

e tenho as seguintes tabelas: alunos,livros e aluguel,

ai estou com um problema na tela de devolução de livro,

estou qrendo fazer a verificação se este aluno realmente tem este livro alugado, sendo assim faço uma pesquisa na tabela aluguel onde nome_aluno=@nome_aluno and Nome_Livro=@Nome livro

maas está dando o segiunte erro:

The connection was not closed. The connection's current state is open.

maas eu já tentei fexar o cn.close em tudo qualquer lugar mas n da certo :s

segue meu codigo :

Dim sql As String = "exec pr_dev_Aluguel '" + mskRG.Text + "','" + txtNomeLivro.Text + "'"

Dim cmd As New SqlCommand(sql, cn)

Dim sql2 As String = "exec pr_upd_Devolucao_QtdLivros '" + txtNomeLivro.Text + "','" + txtQtdDevolver.Text + "'"

Dim cmd2 As New SqlCommand(sql2, cn)

Dim sqlPesquisa As String = "pr_sel_Aluguel '" + txtNome.Text + "','" + txtNomeLivro.Text + "'"

Dim cmdPesquisa As New SqlCommand(sqlPesquisa, cn)

cn.Open()

dr = cmdPesquisa.ExecuteReader

If dr.HasRows = False Then

MsgBox("Este aluno não está com este livro locado")

cn.Close()

dr.Close()

Exit Sub

End If

If dr.HasRows = True Then

Try

cn.Open()

cmd.ExecuteNonQuery()

cmd2.ExecuteNonQuery()

txtIDlivro.Clear()

txtNomeLivro.Clear()

txtAutor.Clear()

txtEditora.Clear()

MskDataEntrega.Clear()

txtQtdDevolver.Clear()

MskDataEntrega.Clear()

mskRG.Clear()

txtNome.Clear()

txtAutor.Clear()

txtIDaluno.Clear()

txtDataAluguel.Clear()

Finally

cn.Close()

End Try

MsgBox("Livro devolvido com Sucesso")

End If

algm sabe onde está este erro? porque já n sei mais o que fazer ai :s

obrigado.

o erro é logo no cn.open depois do TRY

e se eu tiro a verificação do sqlPesquisa e tal, o codigo funciona normal

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Gustavo, tudo bem?

Não entendi o motivo de você fechar a conexão sendo que vai usá-la novamente para executar novos comandos. Normalmente, num bloco Try/Catch, usamos o cn.Close() dentro do Finally. Tente remover os seus "cn.Close()" e o "cn.Open()" do Try e deixar apenas o cn.Close() do Finally.

Link to comment
Share on other sites

  • 0
Gustavo, tudo bem?

Não entendi o motivo de você fechar a conexão sendo que vai usá-la novamente para executar novos comandos. Normalmente, num bloco Try/Catch, usamos o cn.Close() dentro do Finally. Tente remover os seus "cn.Close()" e o "cn.Open()" do Try e deixar apenas o cn.Close() do Finally.

opaa td sim e vc?

então cara se eu faço da forma q você falou da o seguinte erro :

There is already an open DataReader associated with this Command which must be closed first.

ai qd eu fexo a conexao da verificação se o aluno está com o livro locado ou não ele da erro dizendo q eu n fexei a conexao do try,

e se eu n abro a conexao no try ele da erro também :s

aee consegui brigadao pela ajuda, o codigo fiocu da seguinte forma:

Dim sql As String = "exec pr_dev_Aluguel '" + mskRG.Text + "','" + txtNomeLivro.Text + "'"

Dim cmd As New SqlCommand(sql, cn)

Dim sql2 As String = "exec pr_upd_Devolucao_QtdLivros '" + txtNomeLivro.Text + "','" + txtQtdDevolver.Text + "'"

Dim cmd2 As New SqlCommand(sql2, cn)

Dim sqlPesquisa As String = "pr_sel_Aluguel '" + txtNome.Text + "','" + txtNomeLivro.Text + "'"

Dim cmdPesquisa As New SqlCommand(sqlPesquisa, cn)

cn.Open()

dr = cmdPesquisa.ExecuteReader

If dr.HasRows = False Then

MsgBox("Este aluno não está com este livro locado")

Exit Sub

dr.Close()

End If

cn.Close()

Try

cn.Open()

cmd.ExecuteNonQuery()

cmd2.ExecuteNonQuery()

txtIDlivro.Clear()

txtNomeLivro.Clear()

txtAutor.Clear()

txtEditora.Clear()

MskDataEntrega.Clear()

txtQtdDevolver.Clear()

MskDataEntrega.Clear()

mskRG.Clear()

txtNome.Clear()

txtAutor.Clear()

txtIDaluno.Clear()

txtDataAluguel.Clear()

Finally

cn.Close()

End Try

MsgBox("Livro devolvido com Sucesso")

Link to comment
Share on other sites

  • 0

Gustavo, qual é a versão do SQL que você está usando? Se for o SQL 2005, adicione essa código ao final da sua string de conexão: MultipleActiveResultSets=True.

EDIT: coloque também um dr.Close() antes do Try.

Edited by Xistyle
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...