Vb.net 登录后出现错误:“已存在与此连接关联的打开的DataReader,必须先关闭它?”

Vb.net 登录后出现错误:“已存在与此连接关联的打开的DataReader,必须先关闭它?”,vb.net,Vb.net,我在主窗体中检索它: Try rs.Connection = con cmd = "select * from cdcol.currency_rate" rs.CommandText = cmd res = rs.ExecuteReader While res.Read Dim currency = res.GetString("currency") ComboBox

我在主窗体中检索它:

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
这是我能控制的

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
我登录时出现了一个错误, 我的密码怎么了?
请帮帮我。

有些事情可能会发生,没有所有的代码很难说,但我会给你一些想法。我假设这是一个WinForms应用程序,也假设这是SQL Server

如果您已验证所有DataReader都已正确关闭,则如果两个DataReader在您的程序中使用共享连接(您说您正在使用选项卡控件并执行查询),则可能有两个DataReader正在同时尝试读取,如果你有一个阅读器在某处运行,然后你点击一个标签,你可能会遇到这种情况。如果这是您想要的行为,您可以通过向连接字符串添加“多个活动结果集”标志来允许多个记录集:

大概是这样的:

Dim connectionString As String = "Data Source=MSSQL1;" & _
"Initial Catalog=AdventureWorks;Integrated Security=SSPI;" & _
"MultipleActiveResultSets=True"
MSDN文章为您提供了更多关于它的信息。在您的场景中,这可能会起作用。MSDN提供了此选项,但这是您的另一个选项,请根据需要的方法使用连接,并在完成后将其丢弃:

MARS的设计目的不是为了消除多个应用程序的所有要求 应用程序中的连接。如果应用程序需要真正的并行 在对服务器执行命令时,应考虑多个连接 用过