ADO.NET连接池三方面讲解

开发 后端
这里就ADO.NET连接池原理、关闭连接、ADO.NET连接池与安全三个方面做出了详细的介绍讲解,希望可以对喜欢研究连接池的朋友有帮助。

连接池还是比较常用的,于是我上网收集了很多关于ADO.NET连接池,在这里分享给大家吧。数据库连接是一种重要的、有限的、开销昂贵的资源,因此用好连接对象是任何应用的最基本的要求。使用数据库连接的要点可总结如下:保存连接字符串应注意安全。打开连接应迟,关闭连接应早。连接字符串是访问数据库的钥匙。连接字符串除了说明要访问的数据之外,还包含了用户为什么可以访问那些数据的身份证明。在执行数据库操作时,用户身份证明是确定数据访问权限的最重要的因素。

ADO.NET连接池原理

#T#连接池允许我们通过一个缓冲池重用现有的连接对象,避免每次使用连接对象时都要新建一个对象。采用连接池之后,只要少量的连接对象就可以满足大量客户端的需要。每一个连接池都与一个独立的连接字符串及其事务上下文关联。每次打开一个新的连接,数据提供者会尝试将指定的连接字符串与连接池的字符串进行匹配。如果匹配失败,数据提供者创建一个新的连接并将它加入连接池。连接池被创建之后,除非进程结束,否则不会被拆除。有人认为这种处理方式会影响性能,其实不然,维护一个不活动的或者空的连接池不需要多少开销。

连接池创建之后,系统会创建一些连接对象并将它们加入连接池,直至达到额定的最小连接对象数量。以后,系统会根据需要新建和加入连接对象,一直到达最大连接对象数量限额为止。如果程序请求一个连接对象时没有空闲的连接对象可用,且连接池里面的对象数量已达到上限,则请求被放入队列,一旦有连接被释放回缓冲池就立即取出使用。

避免用编程的方式构造连接字符串。如果通过合并多个输入数据的方式构造出连接字符串,很容易给注入式攻击以可乘之机。如果必须用到用户输入的数据,务必进行严格的验证。

关闭连接

关闭一个连接时,连接对象被返回给连接池以便重用,但这时实际的数据库连接并未被拆除。如果禁用了连接池,则实际的数据库连接也被关闭。这里必须强调的一点时,连接对象使用完毕后应当显式关闭并将它返回给连接池,不要依靠垃圾收集器来释放连接。实际上,当连接对象的引用超出有效范围时,连接不一定被关闭——垃圾收集器的功能是拆除代表物理连接的.NET封装对象,但这并不意味着底层的连接也被关闭了。

调用Close或Dispose方法可以将连接释放回连接池。只有当生存期结束或出现严重错误时,连接对象才会被从连接池删除。

ADO.NET连接池与安全

如果一个应用程序的所有数据访问操作都使用同样的连接字符串,连接池的优势将发挥到极限。但是,这只是一种理想化了的状况,很可能与应用程序的其他要求存在冲突。例如,如果只使用一个连接字符串,要在数据库这一层次上执行安全控制就很困难了。

另一方面,如果让每一个用户分别使用自己的连接字符串(即为每一个用户分别设定数据库帐户),势必出现大量小型的连接池,许多连接根本不会被重用。依照惯例,这类问题的最佳解决方案是寻找两个极端之间的一个适当折衷点。我们可以设置一组具有代表性的公用帐户,同时修改存储过程,使之接受一个表示用户标识的参数,存储过程根据传入的用户标识执行不同的操作。

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

2009-11-03 15:58:22

2010-02-24 14:24:35

.NET 4.0

2009-11-03 16:51:04

ADO.NET连接池观

2009-11-13 13:11:37

ADO.NET连接池

2009-12-23 09:01:15

ADO.NET连接池

2009-11-11 13:59:15

ADO.NET与ADO

2009-11-11 14:04:14

ADO.NET连接池

2009-11-12 09:25:21

ADO.NET连接池

2009-12-23 14:53:28

ADO.NET连接池

2010-01-05 10:11:23

ADO.NET连接池

2010-02-25 09:06:40

ADO.NET连接池

2010-04-28 17:39:26

网络负载均衡

2015-12-01 17:09:11

金融转型华为

2010-09-08 19:35:12

2013-09-13 10:19:27

iOS 7IT

2009-12-23 09:14:52

ADO.NET连接池

2009-12-30 16:22:58

ADO.NET连接池

2009-07-20 14:03:43

Ado.net连接池

2011-03-24 09:59:01

VMware vSphXenDesktop

2017-11-17 08:27:21

点赞
收藏

51CTO技术栈公众号