none
Varios Datareader abiertos con do while RRS feed

  • Pregunta

  • Buenas tardes a todos, les comento mi duda; estoy desarrollando en VB.Net 2013 con una DB en Access, no habia tenido problema al analizar variables dtareader en un do while y en funcion de los datos de esa primera consulta realizar otra cunslta, esto dentro del mismo do while.

    Bien es hora de migrar a SQL Server 2008, estoy revisando mi aplicacion y me topo con el problema, de que cuando ejecuta un query dentro de un do while  con el que estoy recorriendo el datareader (obvio esta abierto) me dice que el Command esta asociado a otro DataReader que necesito cerrarlo primero, aun cuando estoy usando otra variable DataReader y otra variable Commnad, aun que si uso solo una connexion:

    If txt_comp_pn.Text <> "" And txt_description.Text <> "" And cmb_comp_type.Text <> "" And cmb_gender.Text <> "" And cmb_cpa.Text <> "" And txt_comp_supplier.Text <> "" And cmb_sealed.Text <> "" _
                   And txt_cavities.Text <> "" And txt_cavities.Text <> "0" And cmb_tpa.Text <> "" And cmb_color.Text <> "" And txt_image_component.Text <> "" Then
    
                v_command.CommandText = "SELECT components.C_MWSI_PN, components.C_TYPE FROM components WHERE (((components.C_MWSI_PN)='" & txt_comp_pn.Text & "') AND ((components.C_TYPE)='" & cmb_comp_type.Text & "'));"
                v_reader = v_command.ExecuteReader
    
                v_esta = 0
                If v_reader.Read Then
                    v_reader.Close()
                    'v_reader = Nothing
                    'v_connexion.Close()
                    'v_connexion.Open()
                    v_command.CommandText = "SELECT ADDITIONAL_COMP.A_LLAVE, ADDITIONAL_COMP.C_MWSI_PN FROM ADDITIONAL_COMP GROUP BY ADDITIONAL_COMP.A_LLAVE, ADDITIONAL_COMP.C_MWSI_PN HAVING (((ADDITIONAL_COMP.C_MWSI_PN)='" & txt_comp_pn.Text & "'));"
                    v_reader_2 = v_command.ExecuteReader
    
                    Do While v_reader_2.Read
    
                        v_command_2.CommandText = "SELECT * FROM ADDITIONAL_COMP WHERE A_LLAVE=" & v_reader_2(0) & " AND  A_MWSI_PN='" & v_reader_2(1) & "' ORDER BY A_ID"
                        v_reader_3 = v_command_2.ExecuteReader ' aqui marca el error
                        Do While v_reader_3.Read
                            If IsDBNull(v_reader_3(3)) Then v_valor = "" Else v_valor = v_reader_3(3)
                            Select Case v_reader_3(1)
                                Case 1
                                    If cmb_add_clip.Text = v_valor Then v_esta += 1
                            End Select
                        Loop
                    Loop
                End If
            End If
    en la linea
    v_reader_3 = v_command_2.ExecuteReader
    es donde me marca el error, si sierro la coneccion me manda otro mensaje que me dice que el DataReader no esta disponible, cuando trabajaba con Access no tenia este problema, espero explicarme y espero me puedan ayudar, saludos..!!!

    miércoles, 12 de abril de 2017 20:42

Respuestas

  • Hola, para lo que necesitas debes establecer MARS en tu cadena de conexión.

    como ejemplo de cadena de conexión tendrías (fijate la parte negrita)

    Data Source=MSSQL; Initial Catalog=AdventureWorks; Integrated Security=SSPI; MultipleActiveResultSets=True 


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Propuesto como respuesta Brayan De La Cruz jueves, 13 de abril de 2017 3:18
    • Marcado como respuesta thekikoski jueves, 13 de abril de 2017 13:59
    miércoles, 12 de abril de 2017 23:13

Todas las respuestas

  • Hola, para lo que necesitas debes establecer MARS en tu cadena de conexión.

    como ejemplo de cadena de conexión tendrías (fijate la parte negrita)

    Data Source=MSSQL; Initial Catalog=AdventureWorks; Integrated Security=SSPI; MultipleActiveResultSets=True 


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Propuesto como respuesta Brayan De La Cruz jueves, 13 de abril de 2017 3:18
    • Marcado como respuesta thekikoski jueves, 13 de abril de 2017 13:59
    miércoles, 12 de abril de 2017 23:13
  • Hola, para lo que necesitas debes establecer MARS en tu cadena de conexión.

    como ejemplo de cadena de conexión tendrías (fijate la parte negrita)

    Data Source=MSSQL; Initial Catalog=AdventureWorks; Integrated Security=SSPI; MultipleActiveResultSets=True 


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    Hola que tal, me ayudo mucho al activar el multipleactiveresultsets, muchas gracias.
    jueves, 13 de abril de 2017 14:00