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.在池中的连接对象,如果过一段时间没有被访问则自动销毁
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.在池中的连接对象,如果过一段时间没有被访问则自动销毁
相关文章推荐
- 小知识:ADO.NET中的连接池
- 总结了一下ADO.NET数据库连接的相关知识
- .net知识系列之六:(ADO.NET相关知识)
- VS2008构建网站及ADO.NET的相关知识与操作
- ADO.NET类库与SQL相关的知识梳理
- 总结了一下ADO.NET数据库连接的相关知识
- 【ZT】总结了一下ADO.NET数据库连接的相关知识
- 重整ADO.NET连接池相关资料
- ADO.NET相关书籍
- ADO.NET相关操作
- ADO.Net的小知识(连接数据库)
- SQL Server 连接池 (ADO.NET) MSDN
- 关于ado.net连接池的一些分享(原文出自:http://www.cnblogs.com/rickie/archive/2004/10/02/48546.aspx)
- ADO.NET中SQL Server数据库连接池(介绍)
- 黑马程序员-004ADO.NET的琐碎知识
- ADO.Net连接池和连接字符串剖析(转)
- ADO.NET中架构的相关说明
- 黑马程序员—ADO.NET 基础知识
- ADO.NET连接池【整理:来源自网上】
- ADO.NET连接池