封装ADO类进行连接说明介绍

开发 后端
本文覆盖了ADO类的特性、结构、以及具体的使用方法等等,相信这些对您掌握这个ADO.NET中核心成员是有所帮助。。。

我本来说封装的一个ADO类,有兴趣的可以去看看,使用还是非常方便,ADO类开发了一个多线程的网络服务程序a.exe,因为听说ADO不是线程安全的,所以认为多线程不能共享连接。

现在的运行方式是处理一个客户请求开启一个线程,每个线程都会打开一个数据库连接,(线程运行结束的时候,就会关闭连接)。开始运行较为稳定,运行一两天之后,打开连接就失败了,ADO类重起服务程序之后,就可以连接成功。另外,该服务程序a.exe需要查询、插入、更新数据库中的表,同时另一个程序b.exe需要更新同样的表,web服务器也要通过ASP查询、插入这些表。问题如下:

 1)导致连接失败的原因是什么呢?ADO类打开的连接太多?(最多的时候a.exe有六个线程同时运行,但是他们会频繁的打开、关闭连接)。听别人说“连接池”可以解决打开连接太多的带来的问题,哪位高手解释一下“连接池”如何实现?

 2)b.exe在更新表中的记录的时候,出现错误,大意如下:”0x80004005错误,spid 65作为事务死锁的牺牲品,被禁止了,请重新运行事务”,是不是进程间访问数据库互斥操作导致的?如何解决呢?a.exe和b.exe采用不同的数据库用户登录,也不行。事务死锁会不会导致连接失败呢? #t#

3)DB Connection 和 Session有何不同?二者的关系是什么呢?如何共享Connection呢?如何ADO类实现?

我已经查阅了很多资料,一直没能解决问题,请各位高手指点几句。 因为我是新手初来查到,分数有限,等有分了,再加分。 导致连接失败的原因应该是死锁,这时很多进程都在等待其他的进程释放连接,如果死锁,肯定导致连接失败 。

连接最好不要放到Session和Application中去,这样在访问人数多的时候容易死锁,ADO类不是线程共享的,如果ADO类放到Session和Application中,连接一直不能被释放,而总的连接数是固定的,其他的程序就一直等待连接的释放,从而导致请求的队列越来越长。

建立一个进程共享区,ADO类当用户请求连接并在查询完成要释放连接时,不关闭此连接,而是把这个连接放到共享区中。下一个用户请求查询时,先从共享区找有无可用连接,如果有,使用该连接查询,如无,则新建一个,使用完毕后同样放入共享区。

这样带来的问题:
  1、共享区里的连接要做保护,以免不同进程同时使用一个连接;
  2、要限制共享区连接的数目,以免资源耗尽;
  3、要写一个查询可用连接的算法。

责任编辑:chenqingxiang 来源: javaeye.com
相关推荐

2009-12-29 15:22:40

ADO.NET类库

2009-12-28 09:58:52

ADO操作

2009-12-25 09:25:54

ADO.NET实例

2010-01-04 15:37:41

ADO连接

2009-12-24 15:42:01

ADO类库

2010-01-04 16:24:07

ADO连接池

2009-12-29 15:30:15

ADO Insert

2009-12-31 14:18:46

ADO.NET类库

2009-12-18 15:11:50

ADO.NET类

2009-12-31 10:16:45

ADO.NET体系结构

2009-08-19 09:36:03

ADO封装类

2009-12-23 09:55:23

ADO.NET数据源

2009-12-24 15:34:44

ADO步骤

2009-12-29 13:46:50

ADO.NET类库

2009-12-28 10:03:58

ADO 对象

2010-01-04 10:27:04

DataTable对象

2009-12-22 15:08:46

ADO控件

2009-12-22 11:17:58

ADO.NET产品

2009-12-25 17:11:40

ADO方法

2009-12-30 16:05:20

ADO.NET实例
点赞
收藏

51CTO技术栈公众号