今天解决了某系统中一年多来一直存在的疑难问题。由于正常情况下,或者说大部分情况下,该问题是不会发生表现为错误的。而只有在特殊情况才会表现。可能当初也是由于这个原因,前辈们才把问题存了下来。这个特殊情况是什么情况呢?通过全面的跟踪,我个人分析如下(如有不当之处,还请高手指正):
当OLEDB类型的资源申请并得到占有后,由于某种原因发放的异常,例如,网络中断。紧接着系统的其他部分也发现了,刚才申请到的会话已经不在是连接状态了,接着又试图、尝试连接。但由于刚才的会话并没有释放。再次,强调由于那个OLEDB资源被已经断开的那个会话,以排斥模式占有了。此时,别的会话——当然包括,要使用该资源的,那个已经断开会话的再次尝试申请资源的会话(些句比较绕口)——再去申请那个资源就会报错。
原来的代码如下:
修改后代码如下:
还有点要给大家分享下:这个是*.aspx.cs文件,可以直接部署到正式系统上。但如何能使新文件生效呢?我采用的办法是把池强制回收。