为我昨天问了个白痴问题--散分

ETstudio 2007-11-29 01:01:35
今天在论坛上我问的一个白痴问题--SqlConnection自动关闭问题

原来的ado.net 连接池的知识在1.1就看过了,可是看过就忘记了,直到今天才把这个基础知识给掌握了,原文的问题是
string connectionString = "server=192.168.1.2;user id=××××;password=test;database=××××;min pool size=4;max pool size=40;packet size=3072";
using (SqlConnection Conn = new SqlConnection(connectionString))
{
Conn.Open();
SqlCommand Cmd = Conn.CreateCommand();
Cmd.CommandText = "select top 1 * from Book_Info";
using (SqlDataReader Reader = Cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
Reader.Close();
}

Conn.Close();
}
为什么这样数据库连接没关闭,确切的说应该是连接池并没断开,我把两者混成一个,因为在asp里是一个 。

先说说为什么会觉得他没关闭。公司刚刚从asp转到asp.net,服务器原来使用asp连接数据库的时候,数据库都是连上-操作-断开,数据库连接信息中也就很少几个连接,毕竟并发
的人数也不会那么多。
转到asp.net以后,数据库连接就有很多个,明明已经close了,但是还是那么多个,所以那问了上面那个比较白痴的问题。

首先,先说asp.net的close 和asp 里close的区别,asp里的close是真的和数据库断开,下次使用时候再次连接。
asp.net里的ado.net是把连接交给了连接池去管理,close的时候只是还给连接池一个连接,open的时候再从连接池里拿会一个可用连接。所以连接池里有多少个连接是ado.net在控制,
跟asp.net里的close是无关的,这样的话,自然不会影响数据库上的连接数减少。

其次说说CommandBehavior.CloseConnection 这个用Reflector可以查到如下代码
bool flag2 = this.IsCommandBehavior(CommandBehavior.CloseConnection);
if (flag2 && (this.Connection != null))
{
this.Connection.Close();
}

自然是自动关闭的

最后就是说说连接字符串的问题了
//string connectionString = "server=192.168.1.2;user id=×××;password=test;database=****;min pool size=40;max pool size=40;packet size=3072";

min pool size=40;max pool size=40 这里一个设置最小连接池数和最大连接池数,需要注意的是,如果象这样设置,第一个数据库连接,连接池会再建立连接后,继续建立连接,直到40个为址

那么怎么设置成跟asp中ado一样呢,只使用一个连接,需要在连接语句中添加pooling=false ,当然这个是不提倡用的,因为连接池减少了与数据库频繁连接的开销。


另外谢谢Ivony ,此人什么东西都刨根问底,值得学习。我就是有时候太懒了 。。。呵呵
...全文
516 60 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
60 条回复
切换为时间正序
请发表友善的回复…
发表回复
dragonlyf 2007-11-30
  • 打赏
  • 举报
回复
接分
THYZM 2007-11-30
  • 打赏
  • 举报
回复
jf
rczjp 2007-11-30
  • 打赏
  • 举报
回复
来隆重的接分
kinglzj345 2007-11-30
  • 打赏
  • 举报
回复
jf
wenmingcool 2007-11-30
  • 打赏
  • 举报
回复
我是来接分的
zihen520 2007-11-30
  • 打赏
  • 举报
回复
jf
fljzjut 2007-11-30
  • 打赏
  • 举报
回复
最近做毕业设计...来看看..
欧德卢福克斯 2007-11-30
  • 打赏
  • 举报
回复
没看懂,还有分吗?
mxw5495 2007-11-29
  • 打赏
  • 举报
回复
学习~~顺道接分~~
fellowcheng 2007-11-29
  • 打赏
  • 举报
回复
补习下知识
zmhmwf 2007-11-29
  • 打赏
  • 举报
回复
純屬接分 
呵呵!
zahhb 2007-11-29
  • 打赏
  • 举报
回复
学习and接分
hanli810303 2007-11-29
  • 打赏
  • 举报
回复
jf
helloboyqiang 2007-11-29
  • 打赏
  • 举报
回复
希望能接到,谢谢
威尔亨特 2007-11-29
  • 打赏
  • 举报
回复
学习 接分
vicqqq 2007-11-29
  • 打赏
  • 举报
回复
up
shoushii 2007-11-29
  • 打赏
  • 举报
回复
jfjf
kkfvjmtd 2007-11-29
  • 打赏
  • 举报
回复
学习中,看来我是来迟了。。。。。。
denver_2013 2007-11-29
  • 打赏
  • 举报
回复
楼主不必介意,什么都是在学习。有的是学习知识,有的是获得经验。只要我们得到了东西就可以了,不是么?
honey52570 2007-11-29
  • 打赏
  • 举报
回复
jf
加载更多回复(40)

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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