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 はそれ自体の後にクローズアップしますか?

提案を歓迎します:)

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

この理由の 1 つは、接続をまったく開くことができなかったことです。「SqlConnection.Open」ステートメントで発生する例外はすべて抑制されています。問題がアプリケーションにない場合は、サーバーが接続を許可できない可能性があります。アプリまたは同じサーバーでホストされている他のデータベースでの接続リークが原因である可能性があります。

于 2011-12-21T19:00:34.540 に答える