Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 调用SMO服务器和数据库后清理_Asp.net_Sql Server 2008_Smo - Fatal编程技术网

Asp.net 调用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)) {

你如何让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或类似的方法。

MSDN文章可能会提供一些帮助。它指出:

调用该方法时 连接不会自动关闭 释放。方法必须 被显式调用以释放 连接到连接池。 此外,您还可以请求一个非池 连接。您可以通过设置 财产 财产 引用对象


阅读完所有内容后,我通过设置

server.ConnectionContext.NonPooledConnection = true;
在我拿到数据库后,我可以打电话给

server.ConnectionContext.Disconnect();

这起作用了。我只是在处理完服务器对象后调用了它:server.ConnectionContext.Disconnect();我已经把头发拔了好几个小时了。这救了我的命!