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.在池中的连接对象,如果过一段时间没有被访问则自动销毁
相关推荐
- **连接池管理**:ADO.NET 支持连接池管理,可以在应用程序启动时初始化连接池,减少连接建立和断开的时间消耗。 - **使用参数化查询**:避免 SQL 注入攻击,提高安全性。 - **优化查询**:对复杂查询进行性能优化...
ADO.NET利用连接池来提高性能,它会复用已打开的连接,减少创建和销毁连接的开销。默认情况下,连接池会在关闭连接后保持一段时间,以便后续请求可以重用。 7. **异步操作**: 在现代应用中,为避免阻塞UI线程,...
9. **连接池**:ADO.NET使用连接池管理数据库连接,提高性能。通过合理的连接管理和关闭,可以避免过多的连接开销。 10. **数据验证**:在源代码中,你可能看到对用户输入数据的验证,确保数据的完整性和安全性。 ...
在给定的代码片段中,可以看到多个`using`语句,这些语句引入了ADO.NET相关的命名空间,比如`System.Data.SqlClient`用于与SQL Server数据库交互,而`System.Configuration`则用来读取配置文件中的连接字符串。...
### ADO.NET操作数据库知识点详解 #### 一、概述 ADO.NET是Microsoft提供的一套用于访问和操作数据库的API,广泛应用于.NET Framework中。通过ADO.NET,开发人员能够高效地与各种类型的数据库进行交互,包括SQL ...
了解何时使用DataSet、DataReader或异步操作,以及如何正确处理连接池,都是提升ADO.NET应用程序性能的关键。 以上就是ADO.NET的主要知识点和用法,掌握这些将有助于理解如何高效地访问和操作数据库。在实际开发中...
在提供的"database"压缩包文件中,可能包含了示例数据库文件、示例代码或者数据库连接字符串等资源,这些都可以帮助初学者更好地理解和实践ADO.NET的使用。 总结起来,ADO.NET为.NET开发者提供了强大且灵活的数据库...
我们将学习如何处理ADO.NET中的异常,并了解连接池的概念和作用,以及如何优化数据库连接池的使用。 第十讲: LINQ to SQL与Entity Framework 虽然ADO.NET是基础,但现代.NET开发更多使用LINQ to SQL和Entity ...
8. **调试和性能调优**:学习这些源代码还能了解如何在出现问题时进行调试,以及如何优化ADO.NET应用程序的性能,比如使用连接池、批量操作和预编译SQL命令等。 9. **数据验证**:在ADO.NET 4中,可以利用...
例如,创建一个登录系统,通过ADO.NET连接数据库验证用户名和密码,或者实现数据的增删改查操作。 本教程的案例部分将深入讲解以上知识点,并通过具体的代码示例,帮助学习者理解和应用ADO.NET进行数据库访问。案例...
面试中可能会询问如何处理连接池,以优化资源使用和提高性能。 3. Command对象:理解如何使用Command对象执行SQL查询、更新和删除操作。了解参数化查询的重要性,它可以防止SQL注入攻击并提高代码可读性。 4. ...
本系列教程由专家王然讲解,涵盖了ADO.NET数据访问技术的基础到高级应用,包括连接池的使用、不同连接方式、连接字符串的安全管理以及课程的总体概览。 首先,我们来看“01 ADO.NET数据访问技术系列课程概览”。这...
以下将详细解析ADO.NET的核心知识点,结合课程中可能涵盖的章节内容进行深入探讨。 1. **数据访问基础**:课程可能首先介绍数据访问的基础概念,包括数据库连接、命令执行和结果集处理。ADO.NET通过Connection对象...
8. **性能优化**:在大量数据处理或高并发场景下,如何有效地利用ADO.NET优化数据库查询和操作,比如使用连接池、批处理和缓存策略,对于提升应用性能有着显著影响。 9. **安全性和身份验证**:在ASP.NET中,安全性...
9. **连接池**:ADO.NET 使用连接池来优化数据库连接的创建和释放。在给定的C#代码中,即使创建了两个 `SqlConnection` 对象,但由于连接池的存在,实际上只创建了一个物理连接。 10. **错误号4060**:SQL Server ...
11. **性能优化**: 通过使用批处理、预编译的存储过程、连接池等技术,可以显著提升ADO.NET应用程序的性能。连接池管理数据库连接的创建、使用和释放,降低了创建新连接的开销。 12. **错误处理和事件**: ADO.NET...
9. **性能优化**:通过使用连接池、预编译的 SQL 查询和批量操作,可以显著提高 ADO.NET 的性能。连接池减少了创建和销毁数据库连接的成本,而预编译的 SQL 可以加快执行速度。 10. **数据绑定**:ADO.NET 可以轻松...
8. **打开和关闭连接**:在ADO.NET中,数据库连接的管理和释放非常重要,及时关闭连接可以有效利用连接池资源,防止资源耗尽。 9. **连接池**:连接池是数据库连接管理机制,用于重用已建立的连接,减少创建和销毁...