【发布时间】:2010-08-25 14:02:27
【问题描述】:
如何让 SMO 释放它的连接?
我有这个代码:
public static class SqlServerConnectionFactory
{
public static Server GetSmoServer()
{
using (var c = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString))
{
var s = new ServerConnection(c);
c.Close();
return new Server(s);
}
}
public static Database GetSmoDatabase(Server server)
{
var db = server.Databases[ConfigurationManager.AppSettings["Database"]];
db.AutoClose = true;
return db;
}
}
从在 IIS 中运行的 ASP.Net MVC 应用程序中这样调用...:
public ActionResult Index()
{
server = SqlServerConnectionFactory.GetSmoServer();
database = SqlServerConnectionFactory.GetSmoDatabase(server);
var vm = new SettingsIndexViewmodel(database);
return View(vm);
}
对于我对该索引方法的每次调用,都会建立一个连接 - 并且不会再次释放。
因此,在对页面进行 20 次调用后,我有 20 个连接等待命令。当我无法建立新连接时,这最终会出现异常,因为连接池已满。
我需要怎样做才能避免这种情况发生?我似乎在 SMO 服务器对象上找不到像 Dispose、close 或类似的方法。
【问题讨论】:
标签: asp.net sql-server-2008 smo