Ir para conteúdo
Fórum Script Brasil
  • 0

Erro dizendo que não fexei a conexão


Gustavo Ricardo

Pergunta

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 para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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.

Editado por Xistyle
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...