有关数据库连接自动关闭的问题

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 ,当然这个是不提倡用的,因为连接池减少了与数据库频繁连接的开销。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值