i am using vb asp.net

error: there is already an open DataReader associated with this Command which must be closed first.

working on this issue for couple weeks now and i have no idea how to fix this. any help will be helpful

i am using 2 reader on page load to display some information, but each of them i am closing it.

after that i am using 3rd reader on button click, which is giving me this error

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            ...
            Dim reader As SqlDataReader = cmd1.ExecuteReader()
            While reader.Read()
                ...
            End While
            reader.Close()
            reader.Dispose()

            ...
            Dim reader2 As SqlDataReader = cmd1.ExecuteReader()
            dt.Load(reader2)
            reader2.Close()
            reader2.Dispose()

            BagRepeater.DataSource = dt
            BagRepeater.DataBind()
        End If
End Sub

Public Sub CHECKOUTLB_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CHECKOUTLB.Click
 Dim Order_ID As Long
            Dim InsertOrderTBSelect As String = "Select @@Identity"
            Dim InsertOrderTB = "INSERT INTO [ORDER_TB] ... "
            Dim cmd1 = New SqlCommand(InsertOrderTB, sqlConn)
            cmd1.ExecuteNonQuery()
            cmd1.CommandText = InsertOrderTBSelect
            Order_ID = cmd1.ExecuteScalar()

            Dim reader3 As SqlDataReader = cmd3.ExecuteReader()
            While reader3.Read()
                Dim InsertOrderDetailTB = "INSERT INTO [ORDER_Detail_TB] ... "
                Dim cmd4 = New SqlCommand(InsertOrderDetailTB, sqlConn)
                cmd4.Parameters.AddWithValue("@Order_ID", Order_ID)
                cmd4.Parameters.AddWithValue("@Product_ID", reader3("Product_ID"))
                cmd4.Parameters.AddWithValue("@QTY", reader3("QTY"))
                cmd4.Parameters.AddWithValue("@Color", reader3("Color"))
                cmd4.ExecuteNonQuery()
            End While
            reader3.Close()

end sub

Recommended Answers

All 2 Replies

This line

Dim reader3 As SqlDataReader = cmd3.ExecuteReader()

doesn't look right to me. Where is cmd3 coming from?

From my opinion your error should be occurred in between these following lines.
cmd1.ExecuteNonQuery()
cmd1.CommandText = InsertOrderTBSelect

First dispose/close the sqlcommand object then use it for another sql statement.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.