【问题标题】:ODBC Connection in Asp.Net (Connect and Dispose)Asp.Net 中的 ODBC 连接(连接和处置)
【发布时间】:2011-09-28 13:32:33
【问题描述】:

我在页面启动并运行时打开和关闭 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

【问题讨论】:

  • 可能写在 Try Catch 的 finally 块中
  • 当用户进行下拉选择时,我实际上会点击很多数据库,所以我不想在他们关闭应用程序之前释放连接。还是我看错了?
  • 你在这里关闭连接,所以我认为没有必要再次处理它。

标签: asp.net web-applications


【解决方案1】:

我不会使用 Page_Load 来启动连接。在 .NET 中,当您 Dispose() 时,“真正的”连接对象会返回到池中,因此它可以用于其他工作。即使您多次打开、关闭和处理,也只有几微秒的最大开销,因此尽早打开连接,然后在整个页面持续时间内保持打开状态并不能真正帮助您。

此外,在 Page_Load 中打开连接意味着您已将数据访问与 UI 紧密耦合,从而使您需要进行大量重新架构,而不仅仅是重新安排以将工作划分为适当的层。

这意味着应该以一种方法(在您的示例中)创建、使用和处置连接。这意味着它既可以在逻辑上分离,也可以很容易地分成不同的类和/或程序集,如果应用程序增长,您需要完整的 DAL。

我至少会将所有房地产转移到与 LoadSomeData() 方法的连接。如果您想要更适当地分离关注点,请创建一个 GetSomeData() 例程并让 LoadSomeData() 例程调用 GetSomeData() 例程并调整数据以便可以轻松绑定,而不是一次消耗一行(在您的例如,您不是将数据对象绑定到下拉列表,而是一次推送一项)。

我希望这会有所帮助,我很抱歉那里的许多示例在最佳实践方面确实很糟糕。而且,是的,这包括来自应该更了解的人的许多样本。 ;-)

【讨论】:

  • 感谢您的回答。我会试一试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多