0

各反復で複数のテーブルからデータを取得するリピーターがあります。現在、OnItemDataBound イベントに入るとすぐに接続を開き、イベントが完了する前に閉じています。つまり、私の場合、接続は 1000 回以上開閉されます。これはこれを行う正しい方法ですか?他の方法はありますか?

私のコードは基本的に次のようになります

 Protected Sub myRepeater_OnItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs)
    Try
        mycon.open()
        Dim RowView As DataRowView = e.Item.DataItem

        //fetch data from 5 different tables using the data from the datasource (dataset)

        mycon.close()
    Catch ex As Exception

    End Try
End Sub
4

1 に答える 1

1

実際には、接続プールを使用しているときに物理接続を閉じていないため、可能な限り最小の範囲で接続をすぐに開いたり閉じたりすることをお勧めします。接続を閉じると、接続が使用可能になります。

しかし、それとは別に、リピーターが既にデータバインドされたItemDataBoundに発生する接続を使用するのはなぜですか? には、必要なものがすべて含まれている必要があります。DropDownLists やネストされたリピーターなどの子コントロールが必要な場合は、それが正しい方法です (その場合は、メソッドにカプセル化する必要があります)。DataItemDataBind

そして、using-statement接続を破棄(閉じる)するために使用する必要があります:

Dim rowView As DataRowView = e.Item.DataItem
Dim someDropDown = DirectCast(e.Row.FindControl("DropDownList1"), DropDownList)
Using myCon = New SqlConnection(connectionString)
    Try
        mycon.Open()
        'databind the dropdown...'
    Catch ex As Exception
        'log exception'
    End Try
End Using
于 2012-09-27T21:28:48.217 に答える