Spring.net删除所有adotemplate连接?

时间:2009-01-14 21:25:07

标签: c# sql-server spring.net

我有一个通过spring.net AdoTemplate连接到数据库的应用程序。我负责创建一个恢复数据库方法,该方法使应用程序保持运行但删除网络连接以便删除旧数据库并启动新数据库。我的问题是如何删除此应用程序与此AdoTemplate的所有当前连接?我在Spring 1.1中没有看到任何公共方法来丢弃网络连接。

2 个答案:

答案 0 :(得分:1)

AdoTemplate与SQL数据库之间没有物理“连接”。抛弃事务,AdoTemplate为从ADO.NET执行的每个方法创建一个新的SqlConnection对象,执行命令并在此之后释放SqlConnection对象。 在引擎盖下,ADO.NET缓存池中数据库的物理连接。创建新的SqlConnection对象时,将从池中获取其中一个缓存的物理连接以提供该SqlConnection。 这意味着,您将需要一个不同的策略来解决您的问题。我想到的一个策略是从sysprocesses数据库获取活动连接列表并对它们执行KILL语句。简短的谷歌搜索带来了这个article。请注意,本文引用的是mssql 2000.我很确定,你需要谷歌多一点才能找到2005年的解决方案。自2005年以来,不再允许访问系统表asfair。

HTH, 埃里希

答案 1 :(得分: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();