Asp.net 调用SMO服务器和数据库后清理
你如何让SMO发布它的连接 我有以下代码:Asp.net 调用SMO服务器和数据库后清理,asp.net,sql-server-2008,smo,Asp.net,Sql Server 2008,Smo,你如何让SMO发布它的连接 我有以下代码: public static class SqlServerConnectionFactory { public static Server GetSmoServer() { using (var c = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString)) {
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或类似的方法。MSDN文章可能会提供一些帮助。它指出:
调用该方法时
连接不会自动关闭
释放。方法必须
被显式调用以释放
连接到连接池。
此外,您还可以请求一个非池
连接。您可以通过设置
财产
财产
引用对象
阅读完所有内容后,我通过设置
server.ConnectionContext.NonPooledConnection = true;
在我拿到数据库后,我可以打电话给
server.ConnectionContext.Disconnect();
这起作用了。我只是在处理完服务器对象后调用了它:server.ConnectionContext.Disconnect();我已经把头发拔了好几个小时了。这救了我的命!