当前位置:  开发笔记 > 编程语言 > 正文

return语句是否可以阻止using语句关闭与数据库的连接?

如何解决《return语句是否可以阻止using语句关闭与数据库的连接?》经验,为你挑选了1个好方法。

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

我有以下代码:

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

我在几个地方使用这种代码来创建一个具有相同名称的临时表.

不幸的是,我收到以下错误:There is already an object named '#MyTempTable' in the database.

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

我认为有三件事可能会导致这种情况......

    我需要调用connection.Close()

    我需要将return语句放在using语句之外

    我需要在返回之前删除我创建的临时表

有谁知道它是哪一个?或者如果它没有想到的东西?



1> Tomek Szpako..:

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

通常,当您在.NET库级别关闭/部署连接时,不会关闭实际数据库服务器连接.它只是返回到数据提供程序内部的连接池,并在程序请求具有相同参数和凭据的另一个连接时重用.我不认为数据库会话在返回池之前以任何方式重置,除了打开的事务和可能的一些基本参数.更加昂贵的物体,如临时桌子,是独立的.

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

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有