与连接关联的datareader必须关闭错误

时间:2013-04-28 01:04:57

标签: asp.net mysql vb.net

我有这个奇怪的错误,我找不到解决方案。我有一个函数,每当我必须在数据库中插入数据时我就会调用它。它实际上工作,因为当我检查数据库条目时,它们实际上在那里。

然而,我有这个恼人的错误“已经有一个开放的数据阅读器与连接有关,必须关闭”。我找不到一种方法来阅读它。

这是功能:

Sub InputDataValues(ByVal StrQwery As String)
    Try
        myconn.Open()
        Dim stquery As String = StrQwery
        Dim smd As MySqlCommand
        smd = New MySqlCommand(stquery, myconn)
        smd.ExecuteReader()

        smd.ExecuteReader().Close()//I added this when I wanted to get rid if the mistake
        myconn.Close()

    Catch ex As Exception
        Dim ErrorMessage As String = "alert('" & ex.Message.ToString() & "');"
        Page.ClientScript.RegisterStartupScript(Me.GetType(), "ErrorAlert", ErrorMessage, True)
        myconn.Close()
    End Try
    myconn.Close()
End Sub

这就是我在代码中多次调用它的方式:

InputDataValues(StrQwery)

如果有人给我一个提示,我将非常感激。

当我将其更改为ExecuteNonQuery

时,这就是它的样子
Sub InputDataValues(ByVal StrQwery As String)
    Try
        myconn.Open()
        Dim stquery As String = StrQwery
        Dim retValue As Integer
        Dim smd As MySqlCommand
        smd = New MySqlCommand(stquery, myconn)
        retValue = smd.EndExecuteNonQuery()

        myconn.Close()

    Catch ex As Exception
        Dim ErrorMessage As String = "alert('" & ex.Message.ToString() & "');"
        Page.ClientScript.RegisterStartupScript(Me.GetType(), "ErrorAlert", ErrorMessage, True)
        myconn.Close()
    End Try
    myconn.Close()
End Sub

1 个答案:

答案 0 :(得分:0)

您可以使用ExecuteNonQuery替换ExecuteReader,因为您只是插入数据。 在你的同志中,我的猜测是你每次拨打ExecuteReader都会得到一个新的读者,所以你应该在你创建的第一个上面调用close。