运行程序后,数据库显示连接人数2。我程序中每打开个连接最后都关闭了呀。。请各位教我。谢谢。

解决方案 »

  1.   

    连接Close时,实际上物理连接没有关闭的!
      

  2.   

    conn.open()后都有conn.close()。。数据库连接还是显示2。有什么解决办法呢。
      

  3.   


    private void Button1_Click(System.Object sender, System.EventArgs e)
    {
    propInnerConn = typeof(SqlConnection).GetProperty("InnerConnection", BindingFlags.NonPublic | BindingFlags.Instance);
    object objInnerConn1 = null;
    object objInnerConn2 = null; using (SqlConnection cn1 = new SqlConnection(strConn)) {
    cn1.Open();
    objInnerConn1 = propInnerConn.GetValue(cn1, null);
    cn1.Close();
    }
    using (SqlConnection cn2 = new SqlConnection(strConn)) {
    cn2.Open();
    objInnerConn2 = propInnerConn.GetValue(cn2, null);
    cn2.Close();
    } if ((object.ReferenceEquals(objInnerConn1, objInnerConn2))) {
    MessageBox.Show("创建的两个数据库连接,其内部连接是一样的!", "比较结果", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    }
    上面这个例子创建了两个连接,都关闭了,这两个连接的内部连接都还存在,而且是一样的。
    这应该能让你理解了吧,在默认情况下,连接池是启用的。Close实际上没有关闭真正的物理连接,而是逻辑关闭,这些连接的内部连接都被放入池中,继续使用。
      

  4.   

    你在连接字符串中,多一个Pooliing=false;就可以禁用连接池。 自己权衡,如果你经常打开关闭连接池,禁用连接池意味着性能下降。
      

  5.   

    池进程保持物理连接的所有权。通过为每个给定的连接配置保留一组活动连接来管理连接
    确认是否真正再次利用了同一内部连接,可以使用.NET Reflection中的功能以可编程方式访问私有InnerConnection属性的内容
    http://blog.163.com/henan_lujun/blog/static/19538333200781715121731/