none
Já existe um DataReader aberto associado a este Command que deve ser fechado primeiro RRS feed

  • Pergunta

  • Bom dia.

    Estou iniciando em VB.NET e estou com este erro. Alguém poderia me ajudar? Tentei pesquisar este erro no fórum mas não fui feliz.

    O cenário é o seguinte:

    Estou acessando um banco SqlServer através de Stored Procedure. O primeiro Command funciona perfeitamente, quando executo o 2º aparece este erro, só que para ele estou usando um outro Command e outro DataReader e mesmo assim aparece o erro. Segue meu código

            Dim cnn As New SqlClient.SqlConnection
            cnn.ConnectionString = ConnBD
            cnn.Open()
    
            Dim sqlCmd As New SqlClient.SqlCommand
            sqlCmd.Connection = cnn
            sqlCmd.CommandType = CommandType.StoredProcedure
            sqlCmd.CommandText = "proc_Vendas_SecaoAberta"
    
            Dim rst As SqlClient.SqlDataReader
            rst = sqlCmd.ExecuteReader()
    
            rst.Read()
    
            If IsDBNull(rst.Item("numsecao")) = False Then
    cboHorario.SelectedValue = Convert.ToInt32(rst.Item("idsecao").ToString)
                cboFilme.SelectedValue = Convert.ToInt32(rst.Item("idfilme").ToString)
                mskData.Text = rst.Item("data").ToString
                ' precisa pegar o numero de cadeiras vendidas na secao
                            Dim sqlCmd2 As New SqlClient.SqlCommand
    
                sqlCmd2.Connection = cnn
                sqlCmd2.CommandType = CommandType.StoredProcedure
                sqlCmd2.CommandText = "proc_Vendas_IngressosVendidos"
    
                sqlCmd2.Parameters.Clear()
    
                sqlCmd2.Parameters.AddWithValue("@Data", rst.Item("Data").ToString)
                sqlCmd2.Parameters.AddWithValue("@Secao", rst.Item("idSecao").ToString)
                sqlCmd2.Parameters.AddWithValue("@Filme", rst.Item("idfilme").ToString)
                ' cria o parametro de saida
                sqlCmd2.Parameters.Add("@numIngressos", SqlDbType.Int).Direction = ParameterDirection.Output
    
                Dim rst2 As SqlClient.SqlDataReader
                rst2 = sqlCmd2.ExecuteReader()
                rst2.Read()
    
                If sqlCmd2.Parameters("@numIngressos").Value <> 0 Then 
                    lblCadeirasVendidas.Text = sqlCmd2.Parameters("@numIngressos").ToString
                End If
            End If
            rst.Close()
            cnn.Close()

    O erro é apresentado na linha: rst2 = sqlCmd2.ExecuteReader()

    Obrigado.

    quarta-feira, 16 de agosto de 2017 13:12

Respostas

  • Após, dar uma pesquisada sobre o DataReader, descobri que não posso utilizar da maneira como está, pois, uma vez utilizado o DataReader, ele bloqueia a Connection até que seja fechado, então tive que mudar o código, mas agora funcionou.

    Obrigado a todos.

    quarta-feira, 16 de agosto de 2017 17:57

Todas as Respostas

  • Após, dar uma pesquisada sobre o DataReader, descobri que não posso utilizar da maneira como está, pois, uma vez utilizado o DataReader, ele bloqueia a Connection até que seja fechado, então tive que mudar o código, mas agora funcionou.

    Obrigado a todos.

    quarta-feira, 16 de agosto de 2017 17:57
  • Boa tarde, José Acílio F. Leão.

    Que bom que encontrou a resposta.


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 16 de agosto de 2017 20:42
    Moderador