ado.net 连接池相关知识

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Data.SqlClient;

namespace _10连接池2
{
    class Program
    {
        static void Main(string[] args)
        {
            //string constr = "Data Source=zxtiger;Initial Catalog=itcastcn;Integrated Security=True";
            //using (SqlConnection con = new SqlConnection(constr))
            //{
            //    con.Open();
            //}

            //using (SqlConnection con1 = new SqlConnection(constr))
            //{
            //    con1.Open();
            //}

            string constr = "Data Source=zxtiger;Initial Catalog=Itcastcn;Integrated Security=True;Pooling=false";
            PropertyInfo pinfo = typeof(SqlConnection).GetProperty("InnerConnection", BindingFlags.NonPublic | BindingFlags.Instance);
            SqlConnection con1 = new SqlConnection(constr);
            object obj1 = null;
            object obj2 = null;

            using (con1)
            {
                con1.Open();
                //获取con1内部的InnerConnection对象。
                obj1 = pinfo.GetValue(con1, null);

                #region MyRegion
                同时打开两个相同的连接。
                //SqlConnection con2 = new SqlConnection(constr);
                //using (con2)
                //{
                //    con2.Open();
                //    obj2 = pinfo.GetValue(con2, null);
                //    con2.Close();
                //}
                #endregion
                con1.Close();
            }


            // 两次打开同一个连接
            // string constr1 = "Data Source=zxtiger;Initial Catalog=Itcastcn;User ID=sa;Password=124;";
            SqlConnection con2 = new SqlConnection(constr);
            using (con2)
            {
                con2.Open();
                //获取第二个对象的InnerConnection
                obj2 = pinfo.GetValue(con2, null);
                con2.Close();
            }

            if (obj1 == obj2)
            {
                Console.WriteLine("是同一个对象");
            }
            else
            {
                Console.WriteLine("不是同一个对象!");
            }
            Console.ReadKey();


        }
    }
}

1.第一次打开连接会创建一个连接对象。
2.当这个连接关闭时(调用Close()方法时)会将当期那连接对象放入池中
3.下一个连接对象,如果连接字符串与池中现有连接对象的
连接字符串完全一致,则会使用池中的现有连接,
而不会重新创建一个。
4.只有对象调用Close(),的时候才会放入池中,如果一个连接对象
一直在使用,则下次再创建一个连接对象发现池中没有,也会
再创建一个新连接对象
5.在池中的连接对象,如果过一段时间没有被访问则自动销毁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值