波斯码BOSSMA Information Technology

SQL Server重启后导致ADO.NET连接数据库错误的问题

发布时间:2012年8月7日 / 分类:DOTNET / 次浏览 / 评论

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状态实现的,因此是比较有效率的。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯码,原文地址《SQL Server重启后导致ADO.NET连接数据库错误的问题

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

发表评论