gpt4 book ai didi

c# - return 语句可以阻止 using 语句关闭与数据库的连接吗?

转载 作者:太空狗 更新时间:2023-10-30 00:13:16 26 4
gpt4 key购买 nike

当我创建临时表时,我收到一条错误消息,告诉我临时表已经存在。临时表对 session 来说是唯一的,所以我的连接似乎没有正确关闭,我认为它可能与我在 using 语句中的 return 语句有关。

我有以下代码:

using (IDbConnection connection = dbConnectionHandler.CreateConnection())
{
connection.Open();
CreateATempTable();
PopulateTempTable();
DataSet ds = CallStoredProcThatUsesTempTable();
return ds;
}

我在几个地方使用这种代码来创建同名的临时表。

不幸的是,我收到以下错误:数据库中已经有一个名为“#MyTempTable”的对象

现在,我知道临时表对于 session 是唯一的,因此一旦 session 关闭,它就会消失。

我认为可能会导致这三件事...

  1. 我需要调用 connection.Close()
  2. 我需要将 return 语句放在 using 语句之外
  3. 我需要在返回之前删除我创建的临时表

有人知道是哪个吗?还是我没有想到?

最佳答案

我在这里猜测,但请检查您的数据库连接池设置。尝试关闭池,看看是否有帮助。

通常,当您在 .NET 库级别关闭/处置连接时,不会关闭真正的数据库服务器连接。它刚刚返回到数据提供程序内部的连接池,并且当程序请求具有相同参数和凭据的另一个连接时将被重用。我认为数据库 session 在返回池之前不会以任何方式重置,除了打开的事务和一些基本参数。更昂贵的对象,如临时表,被单独留下。

您可以关闭池(非常低效)。或者您可以在尝试创建临时表之前检查其是否存在,如果存在则删除其内容。或者您可以在关闭连接之前删除临时表。

关于c# - return 语句可以阻止 using 语句关闭与数据库的连接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/588396/

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