我在页面启动并运行时打开并关闭ODBC连接。何时何地应该放置Connection.Dispose方法?我尝试过Page_Disposed,但它永远不会在那里。
Public Class _WepPage1
Inherits System.Web.UI.Page
Dim MyConnection As New Odbc.OdbcConnection
Private Sub Page_Disposed(sender As Object, e As System.EventArgs) Handles Me.Disposed
MyConnection.Dispose()
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'String comes from Web.Config
MyConnection.ConnectionString = ConfigurationManager.ConnectionStrings("MyConnection").ConnectionString
If Not IsPostBack Then
Call LoadSomeData()
Else
'Do some more stuff
End If
End Sub
Private Sub LoadSomeData()
If MyConnection.State = ConnectionState.Closed Then MyConnection.Open()
Dim MyCommand As New Odbc.OdbcCommand("select * from tablename", MyConnection)
Try
Dim dataR As Odbc.OdbcDataReader = MyCommand.ExecuteReader
While dataR.Read
DropDownList1.Items.Add(dataR("column1"))
End While
Catch ex As Exception
End Try
MyCommand.Dispose()
If MyConnection.State = ConnectionState.Open Then MyConnection.Close()
End Sub
答案 0 :(得分:0)
我不会使用Page_Load来启动连接。在.NET中,当您使用Dispose()时,“真正的”连接对象将返回到池中,因此它可用于其他工作。即使您多次打开,关闭和处置,最多也只有几微秒的开销,因此提前打开连接然后在整个页面持续时间内保持打开状态对您没有任何帮助。
此外,在Page_Load中打开连接意味着您已将数据访问与UI紧密耦合,从而为您留下了大量的重新架构,而不仅仅是重新安排将工作分成适当的层。
这意味着连接应该在一个方法中创建,使用和处理(在您的示例中)。这意味着它在逻辑上是分开的,并且很容易分成不同的类和/或程序集,如果应用程序增长,那么你需要一个完整的DAL。
我至少会将所有实现移动到LoadSomeData()方法的连接。如果你想更合适地分离关注点,请创建一个GetSomeData()例程并让LoadSomeData()例程调用GetSomeData()例程并对数据进行整形以便可以轻松绑定,而不是一次消耗一行(在你的例如,您不是将数据对象绑定到下拉列表,而是一次推送一个项目。
我希望这会有所帮助,我很抱歉,许多例子都是最好的做法。而且,是的,这包括来自应该更了解的人的许多样本。 ; - )