您的位置:首页 > 其它

ado.net 连接池相关知识

2013-02-05 16:06 239 查看
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.在池中的连接对象,如果过一段时间没有被访问则自动销毁
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: