我有一个通过 spring.net AdoTemplate 连接到数据库的应用程序。我负责创建一种恢复数据库方法,该方法使应用程序保持运行但断开网络连接,以便删除旧数据库并启动新数据库。我的问题是如何删除此应用程序与此 AdoTemplate 的所有当前连接?我在 spring 1.1 中没有看到任何删除网络连接的公共方法。
maxfridbe
问问题
755 次
2 回答
1
AdoTemplate 和 SQL 数据库之间没有物理“连接”。撇开事务不谈,AdoTemplate 为从 ADO.NET 执行的每个方法创建一个新的 SqlConnection 对象,然后执行一个命令并释放 SqlConnection 对象。在幕后,ADO.NET 将物理连接缓存到池中的数据库。当您创建一个新的 SqlConnection 对象时,将从池中获取其中 1 个缓存的物理连接来为该 SqlConnection 提供服务。这意味着,您将需要不同的策略来解决您的问题。我想到的一种策略是从 sysprocesses 数据库中获取活动连接列表并对其执行 KILL 语句。简短的谷歌搜索提出了这篇文章. 请注意,本文指的是 mssql 2000。我很确定,您需要更多地搜索 google 才能找到 2005 年的解决方案。自 2005 年以来,它不再被允许访问系统表。
hth,埃里希
于 2009-01-14T22:17:30.090 回答
0
最终效果很好的是:
SqlConnection.ClearAllPools();
// if any connections were being used at the time of the clear, hopefully waiting
// 3 seconds will give them time to be released and we can now close them as well
Thread.Sleep(3000);
//clear again
SqlConnection.ClearAllPools();
于 2009-02-24T21:14:32.037 回答