我有一个转发器,它在每次迭代中从多个表中获取数据。现在我在进入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
答案 0 :(得分:1)
实际上,最好在尽可能小的范围内立即打开/关闭连接,因为当您使用连接池时,您没有连接物理连接。您只需在关闭连接时使连接可用。
但除此之外,为什么你在ItemDataBound
中使用了一个连接?>>转发器已经数据绑定后? DataItem
应该包含您需要的所有内容。如果你想要DataBind
子控件如DropDownLists或嵌套转发器,是的,这是正确的方法(好吧,你应该更好地将它封装在方法中)。
您应该使用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