8

好的,我本周早些时候询问了这个非常错误的问题,并得到了一些非常有用的答案,毫无疑问,自从我开始遵循这些建议以来,情况已经有了很大的改善。

但是,现在我正在使用“正确”的最佳实践方法来访问数据库,但在某些功能上仍然出现此错误,并且我无法让它在该块中消失。这是我的代码:

    Public Shared Function doesBasketExist(ByVal baskethash As String) As Boolean
    Dim _r As Boolean
    Using db As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("pitstopConnectionString").ConnectionString)
        Using cmd As New SqlCommand("doGetBasketByHash", db)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.AddWithValue("@baskethash", baskethash)
            Using dr As SqlDataReader = cmd.ExecuteReader()
                If dr.HasRows() = True Then
                    _r = True
                Else
                    _r = False
                End If
                dr.Close()
            End Using
        End Using
    End Using
    Return _r
End Function

现在无论我做什么,我都会得到:ExecuteReader 需要一个开放且可用的连接。连接的当前状态为关闭。在这个连接上。我在这个类(cmd、dr 等)中确实有带有对象的函数(cmd、dr 等),但是 Using 会在它自身之后关闭,不是吗?

欢迎提出建议:)

4

3 回答 3

14

我想你忘记打开连接了。

在此行之前打开它:

cmd.Parameters.AddWithValue("@baskethash", baskethash)

使用 -

db.Open()
于 2009-05-08T09:33:47.850 回答
2

您实际上忘记了Open连接:

        db.Open()
        Using dr As SqlDataReader = cmd.ExecuteReader()
于 2009-05-08T09:34:47.613 回答
1

造成这种情况的一个原因是您的连接根本无法打开。“SqlConnection.Open”语句中出现的任何异常都被抑制了。如果问题不在您的应用程序中,则可能是服务器无法授予您连接。可能是因为您的应用程序或同一服务器上托管的其他数据库中的连接泄漏。

于 2011-12-21T19:00:34.540 回答