ADO.NET连接数据库默认是有连接池的,当SQL Server重启或连接池中的连接意外被关闭后,应用程序再次发送数据查询请求时,会使用连接池中的连接,这时就会抛出一个异常,因为这个连接已经关闭了。应用程序检测到这个异常后,就会把连接池中的这个连接作废。后续访问就不会有这个异常抛出了。
但是对于某些要求较高的程序,这个异常就必须得处理了。其实微软也认为这是一个问题,并提供了解决方案:
http://support.microsoft.com/kb/2533523
安装这个补丁,就不会返回异常了。
原理:
it forces SqlClient to check if the connection in the pool is dead before returning it to the application.? If the connection is dead, SqlClient simply reconnects before returning it to the application.? It’s important to note that that this fix does not add any additional roundtrip to the server.? Instead, it just checks the socket status in the TCP layer, which is very fast and effective.
大意就是:在连接之前,它会强制SqlClient检测连接池中的连接是否已经挂掉,如果已经挂了,SqlClient会重新连接。连接是否挂掉是通过检测Socket状态实现的,因此是比较有效率的。
关键字: ado.net
发表评论
相关文章
国内AI资源汇总,AI聊天、AI绘画、AI写作、AI视频、AI设计、AI编程、AI音乐等,国内顺畅访问,无需科学上网。
扫码或点击进入:萤火AI大全
文章分类
最新评论