当我创建临时表时,我收到一条错误消息,告诉我临时表已经存在.临时表对于会话是唯一的,所以看起来我的连接没有正确关闭,我认为它可能与我在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语句之外
我需要在返回之前删除我创建的临时表
有谁知道它是哪一个?或者如果它没有想到的东西?
我在这里猜测,但检查您的数据库连接池设置.尝试关闭池,看看它是否有帮助.
通常,当您在.NET库级别关闭/部署连接时,不会关闭实际数据库服务器连接.它只是返回到数据提供程序内部的连接池,并在程序请求具有相同参数和凭据的另一个连接时重用.我不认为数据库会话在返回池之前以任何方式重置,除了打开的事务和可能的一些基本参数.更加昂贵的物体,如临时桌子,是独立的.
你可以关闭池(非常低效).或者,您可以在尝试创建临时表之前检查临时表的存在,并删除其内容(如果存在).或者您可以在关闭连接之前删除临时表.