0

以前は常に機能していた非常に単純なサービスがありますが、新しい .NET バージョンにアップグレードしたところ、次のようなエラー メッセージが表示されて機能しなくなりました。

タイムアウトになりました。プールから接続を取得する前に、タイムアウト期間が経過しました。これは、プールされたすべての接続が使用中で、最大プール サイズに達したために発生した可能性があります。

サービスが実行しようとするストアド プロシージャを実行しようとしましたが、ms sql server management studio で直接実行すると 1 秒もかからないので、何が問題なのかわかりません。同じデータベース (同じストアド プロシージャではありません) を使用するクライアントは、同時に使用してもタイムアウトの問題はありません。

コードが表示されるように編集します。

これは、サービスの開始時に呼び出されます。

Private Sub SetupGetBatch1Command()
    GetBatch1Command = New System.Data.SqlClient.SqlCommand("spgetTheData1")
    GetBatch1Command.CommandType = Data.CommandType.StoredProcedure
End Sub

そして、これは時間間隔で:

Private Function GetBatch1() As DataSet
    Dim dataset As New DataSet
    Dim adapter As Data.SqlClient.SqlDataAdapter
    Dim cn As New System.Data.SqlClient.SqlConnection(connectionstring())
    GetBatch1Command.Connection = cn
    adapter = New Data.SqlClient.SqlDataAdapter(GetBatch1Command)
    adapter.Fill(dataset)
    Return dataset
End Function

私はこれを行ったことがなく、それについてあまり知りませんが、少なくとも以下のアドバイスに従って、どこかに cn.dispose() を追加する必要があると思いますか?

他にも同様のデータベース接続があり、すべて上記の例とまったく同じ方法で行われます。

4

1 に答える 1

1

これはほとんどの場合、接続オブジェクトの破棄/クローズに失敗した結果です。SqlConnectionコードを調べて、できればusingステートメントを使用して、すべてのオブジェクトが破棄されていることを確認します。

using (SqlConnection c = new SqlConnection(...))
{
    // use the connection...
    ...
} // c.Dispose() will be called automatically here, even if an exception is thrown.

新しい .NET バージョンへのアップグレードは、ニシンであるか、間接的にのみ問題を引き起こしているのではないかと考えています。例外がスローされたときに適切に接続します。

于 2012-07-06T09:43:52.553 に答える