4
你如何让SMO释放它的连接?打电话给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个连接等待命令。当我无法建立新连接时,这最终会导致异常,因为连接池已满。
我需要做什么来避免这种情况的发生?我似乎无法在Dispose,close或类似的SMO服务器对象上找到方法。
这个工作的 NonPooledConnection属性做到这一点。我在完成服务器对象后调用了这个方法:server.ConnectionContext.Disconnect(); – Kjensen 2010-09-05 11:21:43