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