怎么才算真正意义上的“关闭数据库连接”,结合SQL Server 2005!

hccl 2007-01-06 05:20:55
一直在用SQL Server 2005做为数据库,里面有个“活动监视器”可以查看有哪些进程连接了数据库。

用ASP.Net写了数据库相关操作的程序,每次操作结束都主动关闭数据库。但是却发现“活动监视器”里面始终存在一个刚刚所做的操作的进程,其实这个操作我已经关闭了,这个进程要要大约5分钟时间才消失。

如果我不做关闭数据库连接的操作,则操作进程会慢慢增加,哪怕是同一个操作,这就说明我的关闭是有效的,但是为什么在关闭之后始终会有一个进程暂时存在呢,而不是马上消失?
...全文
770 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Il_Mare 2011-03-06
  • 打赏
  • 举报
回复
学习了
  • 打赏
  • 举报
回复
有人说连接池用于共享数据库连接,是错的。连接池实际上是为了“分享”。当一个连接被放回池中以后,这个连接才能被别的请求使用。
  • 打赏
  • 举报
回复
数据库往往可以有几百个以上的连接,每一个进程可能会并行创建几个甚至几十个连接。例如Ado.net的SQL Server的数据库引擎,在SqlDataReader打开的时候需要独占一个连接,否则就会出错。假如没有必要把数据一次性全读入DataTable(例如根本不需要读出全部数据的时候处理过程就会结束),此时如果需要在打开这个DataReader的同时其它程序也读写此数据库就需要另外创建一个连接。

而Access的引擎在DbDataReader方面有特殊技术(所以嵌入式数据库通常更快),它不独占连接也能在连接用于其它读写操作的维持DbDataReader的记录指针,所以它就不会出错。
  • 打赏
  • 举报
回复
连接池的原理大致是:

把对数据库的实际连接包装在逻辑连接对象中作为应用程序请求的数据库连接。

使用一个“池”,例如hashtable,保存数据库实际连接。

当应用程序请求数据库连接时,如果没有“闲置”的数据库连接,就创建一个数据库连接放入连接池。然后,将一个“闲置”的数据库连接包装成逻辑连接返回。“被使用”的数据库连接不回被分配给别的请求(有人说连接池用于共享数据库连接,是错的)。

当逻辑连接对象dispose的时候, 将实际数据库重新设置为“闲置”,或者说“放回”连接池。“闲置”还是“放回”,具体实现机制可能不同,但是内涵基本一样,就是让物理连接可以被下一个逻辑连接请求使用。

当连接池中的闲置对象超过上限或者闲置时间超过上限的时候,就可以关闭部分或者全部物理连接。所以你去“关闭”物理连接是没有必要的。

连接池在进程中的静态对象,显然进程关闭的时候也就释放连接池。
dcbr4 2007-01-07
  • 打赏
  • 举报
回复
学习!
hccl 2007-01-06
  • 打赏
  • 举报
回复
谢谢楼上的,你说的连接池我经常听说,但是确不知道是什么,劳烦解释一下
aftnTea 2007-01-06
  • 打赏
  • 举报
回复
sql server 和 oracle 提供程序的连接池自动启动.可以在连接字符串中把pooling设置为false来禁用它.
SqlConnection.ClearPool()
或者
SqlConnection.ClearAllPool()
清除连接池,但不赞成关闭连接池
  • 打赏
  • 举报
回复
把 SqlConnection.Close() 并不关闭数据库连接,而是把连接放回连接池。在逻辑情况下,针对需要连接对象的代码而要,可以把这个说成关闭了连接(连接不能在被用来创建SqlCommand、SqlDataAdapter等了),但是并不意味着等价于关闭了与数据库的物理连接。

许多所谓数据库“优化”说关闭连接耗时间,那种关闭连接显然是个低级概念,不是这里所说的关闭连接。
lcw_lance 2007-01-06
  • 打赏
  • 举报
回复
sql 2005我不熟!
小弟用的是2000的
在2000里面不管你在.net里面关没关数据库
进程里面始终有两个sqlserver.exe的进程
除非你自己手工结束!

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧