0

接続は閉じられませんでした。接続の現在の状態はオープンです

私はこの質問が何度も投稿されていることを認識しています.私はそれを徹底的に調査し、ほとんどすべてを試しましたが、修正方法を解決することはできません. 私が見たものはすべて、私のつながりを閉じるように言っていますが、かなり多くの異なる方法でそれを行ったように感じます. これが私の側のコーディングの問題なのか (ポインタや提案を教えてください)、それともサーバー構成の問題なのか (確認方法がわかりません) はわかりません。エラーが発生すると、他のページが一定期間機能しなくなるようです。複数のユーザーが同時にページをクリックすると、これは引き続き発生します。つまり、基本的にサイト全体がダウンします。追加のブラウザを開いてページを開くと、自分で再作成できます。

他の人が再利用できるように接続が閉じられていることを確認するために、このコードでできることはありますか? または、ユーザーが再試行してすべてをダウンさせないように、エラーを処理する別の方法はありますか?

皆さんありがとうございます!

以下の例は私が持っているもののシェルですが、問題が発生します。このサイトの例から作業するためにさまざまな方法を試したので、それらはわずかに異なります。

================================================== ================

コードビハインド:

Imports System.Data.SqlClient
Imports System.Data
Imports System.Web.UI.WebControls.DataControlField

Partial Class test_testConnections
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then

            LoadMetricDatesToDropDown()
            loadMetricWorkstreamsToDropDown()
        End If
    End Sub
    Sub LoadMetricDatesToDropDown()
        Dim draftbit As Boolean = False
        ddlDtSelector.Items.Clear()
        Using oConn As New SqlConnection(ConfigurationManager.ConnectionStrings("aid1564conn").ConnectionString)
            Using cmd As New SqlCommand("usp_DSBR_Date_Selections", oConn)
                cmd.CommandType = CommandType.StoredProcedure
                oConn.Open()
                Using dr As SqlDataReader = cmd.ExecuteReader()
                    If dr.HasRows Then
                        While dr.Read
                            Dim li As New ListItem()
                            If dr("dt_status").ToString.ToUpper = "DRAFT" Then
                                li.Text = dr("Metric_Dt") & " (draft)"
                                draftbit = True
                            Else
                                li.Text = dr("metric_dt")
                            End If
                            li.Value = dr("Metric_dt")
                            ddlDtSelector.Items.Add(li)
                        End While
                    End If
                End Using
            End Using
        End Using
        If draftbit = True Then ddlDtSelector.SelectedIndex = 1
    End Sub


    Sub loadMetricWorkstreamsToDropDown()
        Using oConn As New SqlConnection(ConfigurationManager.ConnectionStrings("aid1564conn").ConnectionString)
            Using cmd As New SqlCommand("usp_DSBR_Get_Workstreams", oConn)
                cmd.CommandType = CommandType.StoredProcedure
                oConn.Open()
                Using dr As SqlDataReader = cmd.ExecuteReader()
                    If dr.HasRows Then
                        While dr.Read
                            Dim li As New ListItem()
                            li.Text = dr("workstream_Name")
                            li.Value = dr("workstream_id")
                            workstreams.Items.Add(li)
                        End While
                    End If
                End Using
            End Using
        End Using
    End Sub


End Class

================================================== ================

ページ

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="testConnections.aspx.vb" Inherits="Test_testConnections" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:DropDownList ID="ddlDtSelector" runat="server" AutoPostBack="true"></asp:DropDownList>
    <asp:DropDownList ID="workstreams" runat="server" AutoPostBack="true"></asp:DropDownList>
    <a href="testConnections.aspx">go</a>
    </div>
    </form>
</body>
</html>
4

2 に答える 2

0

探している答えではないかもしれませんが、データリーダーの代わりにデータセットを使用するように切り替えると、行の反復処理を開始する前に接続が閉じます。これにより、このエラーへの露出を学ぶことができます。

また、このdataadapter.fillメソッドは、まだ開いていない場合は接続を開き、開いている場合は閉じます。そのため、接続を明示的に開く必要はありません (すべきではありません)。

ここでもっと大きなことが起こっている可能性がありますが、それが私がすることです。

于 2013-09-26T19:13:31.060 に答える