如何处理数据访问层(.net)中的连接
我正在写一个数据访问层。我对管理系统中的连接感到困惑。如何处理数据访问层(.net)中的连接,.net,data-access-layer,.net,Data Access Layer,我正在写一个数据访问层。我对管理系统中的连接感到困惑。 我知道.net使用连接池。但我不想在所有dml操作或所有sql查询中打开和关闭数据库连接。我该怎么办?应在何时何地(可能在使用数据访问层的global asax中或在数据访问层中)管理连接?为什么不为每个离散逻辑操作打开/关闭连接?大多数现有的DAL都是这样的。通常,试图比运行时自动为您做的事情(例如智能地管理您的连接)更聪明不是一个好主意。在投入时间和精力为应用程序增加复杂性之前,您应该有强烈的、可证明的技术需求。您应该为每个查询打开和关
我知道.net使用连接池。但我不想在所有dml操作或所有sql查询中打开和关闭数据库连接。我该怎么办?应在何时何地(可能在使用数据访问层的global asax中或在数据访问层中)管理连接?为什么不为每个离散逻辑操作打开/关闭连接?大多数现有的DAL都是这样的。通常,试图比运行时自动为您做的事情(例如智能地管理您的连接)更聪明不是一个好主意。在投入时间和精力为应用程序增加复杂性之前,您应该有强烈的、可证明的技术需求。您应该为每个查询打开和关闭sql连接,除非您正在运行一批语句 “迟开早关”是您应该始终处理数据库连接的方式 如果您是以传统的方式进行(进行自己的查询),MS已经编写了一个很好的数据访问接口。数据的(应用程序块)具有所有格式良好的铃铛和哨子
如果你不想费心写查询,我建议你看看或(首选)。它们将大大简化您的编码 连接管理不应由DAL管理 唯一一个可以负责/可以决定是否打开新连接或关闭连接的层是使用DAL的服务层或应用层。
该层是唯一知道上下文的层,因此,在该层中,您可以决定是关闭连接,还是让连接保持打开状态,因为还有其他数据库通信应该使用相同的连接。您确实应该为每个操作打开/关闭。不要将连接使用视为高成本操作,因为它根本不是。当您在站点上打开连接时,它们将在连接池中创建。当您“关闭”连接时,连接池不会释放连接:它会将其保留在手边,以备重用。因此,虽然导致新连接的第一次调用需要更长的时间,但后续连接速度非常快
更新:在web应用程序中尤其如此!不要试图在全局对象中只打开一次连接,并在所有线程中重复使用它,否则您的站点将无法正常工作。在.Net中编写了几个数据层(以及以前在VB6中编写的更多数据层)之后,我的建议是:
最后一件事——我个人认为,从XSD生成的强类型数据集非常麻烦(而且膨胀)获取比率——以及它们让您大量处理空sux的方式。您为使用它们而编写的所有代码都过于庞大……或者您最终将它们向下转换到数据集,以实际获得一个高效、非重复代码库。对于必须作为事务发生的操作,该怎么办 是您的BL完成了操作和逻辑/验证,对吗 假设你有一个BL层
如何着手解决这个问题?我不清楚回答老问题的礼节,也不知道如何对另一个答案发表评论(我对SO是全新的,今天我还没有喝完第一杯咖啡,所以请给我一些放松=]) 我总是编写我的DAL来打开/关闭每个查询的连接,并让驱动程序的连接池完成连接管理的工作 但是,我有一个使用共享MS Access DB的多用户桌面应用程序(制作此应用程序时,SQL Express并没有以真正可用的形式出现),我偶尔会看到错误,表明已损坏。建议对整个应用程序仅使用一个连接: 不建议重复打开和关闭Microsoft Access数据库。请在应用程序开始时打开数据库一次,然后在应用程序结束时关闭数据库
我的应用程序是多线程的,所以我假设我必须修改建议“每个线程打开一个连接”避免冲突。是否有人有使用OLEDB共享访问数据库和类似损坏问题的经验?数据访问层不是数据库和所有其他代码之间的层吗?DAL是对数据库及其访问方式进行抽象的层。其他代码通过调用DAL可以执行查询,但DAL本身不能执行查询