登录后出错:“已经有一个与此连接关联的打开的DataReader必须先关闭?”

时间:2015-10-06 03:24:51

标签: vb.net

我在mainform中检索它:

Try
        rs.Connection = con
        cmd = "select * from cdcol.currency_rate"
        rs.CommandText = cmd
        res = rs.ExecuteReader

        While res.Read
            Dim currency = res.GetString("currency")
            ComboBox2.Items.Add(currency)
        End While
        res.Close()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

这在我的tabcontrol中

Try
            rs.Connection = con
            cmd = "select * from cdcol.currency_rate where currency='" & ComboBox2.Text & "'"
            rs.CommandText = cmd
            res = rs.ExecuteReader
        While res.Read
            If sell.Checked = True Then
                buy.Text = res.GetDouble("buy_rate")
                coderate.Text = res.GetString("code")
            End If
            If buy.Checked = True Then
                sell.Text = res.GetDouble("sell_rate")
                coderate.Text = ("PHP")
            End If
        End While
        res.Close()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

当我登录时出现错误, 我的代码出了什么问题? 请帮帮我..

1 个答案:

答案 0 :(得分:0)

有些事情可能正在进行,没有所有代码很难说,但我会给你一些想法。我假设这是一个WinForms应用程序(也假设这是SQL Server)?

如果您已经确认所有DataReader都已正确关闭,那么如果他们在您的程序中使用共享连接,则可能有两个DataReader实际上同时尝试读取(您说你是使用选项卡控件并执行查询,如果您有一个读取器在某处运行,然后单击选项卡,您可能会遇到该场景)。如果这是您期望的行为,则可以通过将多个活动结果集标志添加到连接字符串来允许多个记录集:

https://msdn.microsoft.com/en-us/library/h32h3abf(v=vs.110).aspx

这样的事情:

Dim connectionString As String = "Data Source=MSSQL1;" & _
"Initial Catalog=AdventureWorks;Integrated Security=SSPI;" & _
"MultipleActiveResultSets=True"

MSDN文章为您提供了更多有关它的信息。在你的场景中,这可能会奏效。 MSDN提供了这个(这是你的另一个选择,使用你需要的每个方法的连接并在你完成后处理它):

  

“MARS并非旨在消除多重要求   应用程序中的连接。如果应用程序需要真正并行   对服务器执行命令,应该是多个连接   使用“。