2013-04-28 83 views
0

我有这个奇怪的错误,我还找不到解决方案。每当我必须在数据库中插入数据时,我都有一个函数。它的实际工作,因为当我检查数据库条目,他们实际上在那里。数据阅读器与连接必须关闭错误

但是我有这个烦人的错误“已经有一个打开的数据阅读器与连接必须关闭”。我找不到一个方法来阅读它。

这是函数:

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 
+0

尝试'smd.ExecuteNonQuery',而不是'smd.EndExecuteNonQuery'。第二个是异步操作。 'EndExecuteNonQuery'需要一个参数,'ExecuteNonQuery'不需要。 – Tim 2013-04-28 02:38:26

回答

0

你可以使用的ExecuteNonQuery取代的ExecuteReader因为你只是插入数据。 在你coede,我的猜测是每次你调用ExecuteReader你得到一个新的阅读器,所以你应该打电话给你创建的第一个关闭。

+0

让我试试吧。请稍等片刻 – meks 2013-04-28 01:19:30

+0

我应该删除'smd.ExecuteReader()。Close()'吗? – meks 2013-04-28 01:20:07

+0

应该是'smd.ExecuteNonQuery()'? – meks 2013-04-28 01:21:53

相关问题