执行 ExecuteReader 需要一个开放并可用的连接。连接当前的状态为关闭。

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等),但是Using语句不是会自动关闭吗?
欢迎提出建议 :)
3个回答

14

我认为你忘记打开连接了。

在这行代码之前先打开连接:

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

使用 -

db.Open()

2
您实际上忘记了打开连接:

Open

        db.Open()
        Using dr As SqlDataReader = cmd.ExecuteReader()

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接