在asp.net应用程序中管理与数据库的连接

在asp.net应用程序中管理与数据库的连接,asp.net,vb.net,architecture,connection-pooling,Asp.net,Vb.net,Architecture,Connection Pooling,我想知道,在asp.net中管理数据库连接的最佳方法是什么 我的应用程序是使用N层体系结构构建的。 DAL由静态类和方法组成,例如 Public Shared Sub Delete( _ ByVal connection As MyConnectionClass, _ ByVal contact_id As Integer, _ ByVal contact_timestamp As Date _ ) With connection.ProcParams

我想知道,在asp.net中管理数据库连接的最佳方法是什么

我的应用程序是使用N层体系结构构建的。 DAL由静态类和方法组成,例如

Public Shared Sub Delete( _
    ByVal connection As MyConnectionClass, _
    ByVal contact_id As Integer, _
    ByVal contact_timestamp As Date _
)

    With connection.ProcParams
        .Add(New StoredProcParam("p_contact_id", contact_id, OracleDbType.Int32))
        .Add(New StoredProcParam("p_contact_timestamp", contact_timestamp, OracleDbType.Date))
    End With

    connection.Execute("PKG_DATA_ACCESS.DeleteContact")

End Sub
这里需要注意的一点是,我将连接从BLL传递到DAL

以下是我考虑过的几点,但对我来说没有一点是好的,所以我只是想征求一下建议

我是否应该在母版页中创建连接,将其存储在对象中,然后在创建业务对象时将其传递给业务对象(这是我试图避免的事情)

我是否应该使用静态类创建连接,并从业务对象的构造函数中调用CreateConnection之类的方法(这是我喜欢的,但我不希望每个对象都有一个连接,我希望为我的对象的所有实例共享它,但由于asp.net是多线程的,静态类存储连接没有意义)


理想情况下,该解决方案也应该在Windows窗体环境中运行良好(因此,对于当前上下文,没有连接存储在会话中,并使用类中的静态方法检索它)

根本不要尝试持久化连接。在使用它的每个作用域中实例化它。Net将为您管理一个连接池,无论是在windows窗体中还是在asp.Net中

试图保持连接是会话对象或母版页中的连接实际上会损害性能,更不用说引入其他问题了

根据BC的评论:


连接字符串必须是相等的字符串才能在同一个池中结束。

在整个应用程序中共享相同的连接并不总是一个好的做法。想想一个每秒有数百个请求的网站,所有请求都通过同一个数据库连接…我更多地考虑每个用户的连接,但Neil N的回答是:很好,这是我没有想到的。这里值得补充的是,连接字符串必须是相等的字符串才能在同一个池中结束。嗯,我没有想到,这个解决方案适合我的需要,而且在设计上更简单,我喜欢:)@BC,谢谢,我不知道这个小花边。但我想在大多数情况下,您会使用静态全局或资源作为连接字符串,因此它无论如何都是相等的。