三分钟搞定ADO.NET数据库连接

开发 后端
文章介绍了ADO.NET数据库连接的移除、事务支持、ADO.NET数据库连接池的性能计数器,希望对大家有帮助。

学习ADO.NET数据库连接时,你可能会遇到连接的移除问题,这里将介绍解决方法,在这里拿出来和大家分享一下。ADO.NET数据库连接池是为每个唯一的连接字符串创建的。当创建一个池后,将创建多个连接对象并将其添加到该池中,以满足最小池大小的要求。连接将根据需要添加到池中,直至达到***池大小。当请求 SqlConnection 对象时,如果存在可用的连接,则将从池中获取该对象。若要成为可用连接,该连接当前必须未被使用,具有匹配的事务上下文或者不与任何事务上下文相关联,并且具有与服务器的有效链接。

#T#如果已达到***池大小且不存在可用的连接,则该请求将会排队。当连接被释放回池中时,连接池管理程序通过重新分配连接来满足这些请求。对 Connection 调用 Close 或 Dispose 时,连接被释放回池中。警告   建议使用完 Connection 后始终将其关闭,以便连接可以返回到池中。这可以使用 Connection 对象的 Close 或 Dispose 方法来实现。不是显式关闭的连接可能不会添加或返回到池中。例如,如果连接已超出范围但没有显式关闭,则仅当达到***池大小而该连接仍然有效时,该连接才会返回到连接池中。

注意   不要在类的 Finalize 方法中对 Connection、DataReader 或任何其他托管对象调用 Close 或 Dispose。在终结器中,仅释放类直接拥有的非托管资源。如果类不拥有任何非托管资源,则不要在类定义中包含 Finalize 方法。有关更多信息,请参见垃圾回收编程。

连接的移除

如果连接生存期已过期,或者连接池管理程序检测到与服务器的连接已断开,连接池管理程序将从池中移除该连接。请注意,只有在尝试与服务器进行通信后,才可以检测到这种情况。如果发现某连接不再连接到服务器,则会将其标记为无效。连接池管理程序会定期扫描连接池,查找已释放到池中并标记为无效的对象。找到后,这些连接将被***移除。

如果存在与已消失的服务器的连接,那么即使连接池管理程序未检测到已断开的连接并将其标记为无效,仍有可能将此连接从池中取出。当发生这种情况时,将生成异常。但是,为了将该连接释放回池中,仍必须将其关闭。

事务支持

连接是根据事务上下文来从池中取出并进行分配的。请求线程和所分配的连接的上下文必须匹配。因此,每个连接池实际上又分为不具有关联事务上下文的连接以及 N 个各自包含与一个特定事务上下文的连接的子部分。

当连接关闭时,它将被释放回池中,并根据其事务上下文放入相应的子部分。因此,即使分布式事务仍然挂起,仍可以关闭该连接而不会生成错误。这样,您就可以在随后提交或中止分布式事务。
使用连接字符串关键字控制连接池SqlConnection 对象的 ConnectionString 属性支持连接字符串键/值对,这些键/值对可用于调整连接池逻辑的行为。

ADO.NET数据库连接池的性能计数器

SQL Server .NET Framework 数据提供程序添加了几个性能计数器,它们将使您能够微调连接池特性,检测与失败的连接尝试相关的间歇性问题,并检测与对 SQL Server 的超时请求相关的问题。

 

责任编辑:田树 来源: 博客
相关推荐

2009-11-04 17:18:34

ADO.NET连接池

2020-07-21 07:42:29

数据库信息技术

2009-10-29 16:22:10

VB.NET操作MyS

2009-11-05 16:04:19

Oracle用户表

2022-01-05 18:18:01

Flink 数仓连接器

2020-11-20 08:36:59

Jpa数据代码

2009-11-11 13:46:41

ADO.NET异步查询

2022-02-16 19:42:25

Spring配置开发

2024-01-16 07:46:14

FutureTask接口用法

2021-04-20 13:59:37

云计算

2022-02-17 09:24:11

TypeScript编程语言javaScrip

2023-12-27 08:15:47

Java虚拟线程

2009-11-04 16:13:18

ADO.NET数据表

2009-11-09 12:55:43

WCF事务

2009-12-22 09:59:06

ADO.NET数据库

2011-05-20 13:11:22

ADO.NET

2020-03-08 16:45:58

数据挖掘学习数据量

2009-11-12 10:53:57

ADO.NET连接My

2009-10-29 11:39:52

ADO.NET连接池

2021-12-17 07:47:37

IT风险框架
点赞
收藏

51CTO技术栈公众号