gpt4 book ai didi

asp.net - 调用 SMO 服务器和数据库后进行清理

转载 作者:行者123 更新时间:2023-12-04 17:58:36 25 4
gpt4 key购买 nike

你如何让 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 个连接等待命令。这最终以异常结束,当我无法建立新连接时,因为连接池已满。

sp_who

我需要做什么来避免这种情况发生?我似乎无法在 SMO 服务器对象上找到像 Dispose、close 或类似的方法。

最佳答案

MSDN文章 Disconnecting from an Instance of SQL Server 可能会提供一些帮助。它指出:

When the Connect method is called, the connection is not automatically released. The Disconnect method must be called explicitly to release the connection to the connection pool. Also, you can request a non-pooled connection. You do this by setting the NonPooledConnection property of the ConnectionContext property that references the ServerConnection object

关于asp.net - 调用 SMO 服务器和数据库后进行清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3566632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com