gpt4 book ai didi

c# - "using"关键字不关闭打开的 SQL 连接

转载 作者:太空狗 更新时间:2023-10-29 20:58:44 24 4
gpt4 key购买 nike

我指的是很久很久以前 Stack Overflow 上的一篇帖子。 Does End Using close an open SQL Connection

但是我有一个问题。我发现在 SQL 2012 Express 版和 SQL 2008 Developer Edition 上使用根本不会关闭连接。

这是我使用过的代码。该代码将遍历每个数据库并查找指定的特定表,但是,完成后,您在服务器上运行 sp_who,所有连接仍然存在。状态是休眠,cmd 是“AWAITING COMMAND”但是当你尝试创建一个数据库时,模型不能被锁定,因为你仍然有一个连接打开它。这是类里面的错误吗?

using (SqlConnection conn = new SqlConnection("Data Source=" + ServerNameCombo.Text + ";Initial Catalog=master;Persist Security Info=True;User ID=" + UserNameEdit.Text + ";Password=" + PasswordEdit.Text))
{
using (SqlCommand dbs = new SqlCommand("Select name from sysdatabases", conn))
{
conn.Open();
using (SqlDataReader reader = dbs.ExecuteReader())
{
while (reader.Read())
{
using (SqlConnection dbconn = new SqlConnection("Data Source=" + ServerNameCombo.Text + ";Initial Catalog=" + reader["name"].ToString() + ";Persist Security Info=True;User ID=" + UserNameEdit.Text + ";Password=" + PasswordEdit.Text))
{
using (SqlCommand dbscmd = new SqlCommand("Select name from sysobjects where name = '" + TableName + "'", dbconn))
{
dbconn.Open();
if (dbscmd.ExecuteScalar() != null)
{
DBNames += (DBNames != "" ? "," : "") + reader["name"].ToString();
}
}
}
}
}
}
}

最佳答案

这是预期的行为;它会关闭托管连接,这意味着它会释放底层连接 连接池。这会人为地保持连接打开,以便相同连接字符串和标识的下一个托管连接可以使用现有连接(在 TDS 管道中设置重置位)以避免连接启动延迟。

如果您不希望这样做:禁用连接字符串中的连接池 (Pooling=false)。

关于c# - "using"关键字不关闭打开的 SQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20203117/

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