sqlstr = "select * from MainMenu  order by maxm"
        Dim conn As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("connstr"))
        Dim objcmd As SqlCommand = New SqlCommand(sqlstr, conn)
        Dim objreader As SqlDataReader
        Try
            objcmd.Connection.Open()
            objreader = objcmd.ExecuteReader
            Do While objreader.Read
                id = objreader.GetInt32(0).ToString
                mname = objreader.GetSqlString(1).ToString
 '用id,mname
                sqlstr1 = "select * from FromMenu where upid='" & id & "' order by id"
                Dim objcmd1 As SqlCommand = New SqlCommand(sqlstr1, conn)
                Dim objreader1 As SqlDataReader
                ' objcmd1.Connection.Open()
                objreader1 = objcmd1.ExecuteReader
                Do While objreader1.Read
                    id1 = objreader1.GetSqlString(0).ToString
                    mname1 = objreader1.GetSqlString(1).ToString
 '用id1,mname1
                Loop
            Loop
代码如上,运行后提示"已有打开的与此连接相关联的 DataReader,必须首先将它关闭。"
请问怎么解决?

解决方案 »

  1.   

    代码:
    objreader = objcmd.ExecuteReaderobjcmd.Connection连接对象打开了一个DataReader,所以:
    objreader1 = objcmd1.ExecuteReader
    再次打开的时候会报告错误。打开一个DATAREADER,用完后必须关闭,否则出错误。而且,如果有DATAREADER打开,也不能关闭CONNECTION。你的代码修改为:sqlstr = "select * from MainMenu  order by maxm"
            Dim conn As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("connstr"))
            Dim objcmd As SqlCommand = New SqlCommand(sqlstr, conn)
            Dim objreader As SqlDataReader
            Try
                objcmd.Connection.Open()
                objreader = objcmd.ExecuteReader
                Do While objreader.Read
                    id = objreader.GetInt32(0).ToString
                    mname = objreader.GetSqlString(1).ToString
     '用id,mname
                    sqlstr1 = "select * from FromMenu where upid='" & id & "' order by id"
                    Dim objcmd1 As SqlCommand = New SqlCommand(sqlstr1, conn)
                    Dim objreader1 As SqlDataReader
                    ' objcmd1.Connection.Open()
                    objreader1 = objcmd1.ExecuteReader
                    Do While objreader1.Read
                        id1 = objreader1.GetSqlString(0).ToString
                        mname1 = objreader1.GetSqlString(1).ToString
     '用id1,mname1
                    Loop
                    objreader1.Close
                Loop
                objreader.Close