`

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.在池中的连接对象,如果过一段时间没有被访问则自动销毁

0
0
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    ADO.NET连接SQL Server

    - **连接池管理**:ADO.NET 支持连接池管理,可以在应用程序启动时初始化连接池,减少连接建立和断开的时间消耗。 - **使用参数化查询**:避免 SQL 注入攻击,提高安全性。 - **优化查询**:对复杂查询进行性能优化...

    ado.net相关知识

    ADO.NET利用连接池来提高性能,它会复用已打开的连接,减少创建和销毁连接的开销。默认情况下,连接池会在关闭连接后保持一段时间,以便后续请求可以重用。 7. **异步操作**: 在现代应用中,为避免阻塞UI线程,...

    《ADO.NET专业项目实例开发》源代码

    9. **连接池**:ADO.NET使用连接池管理数据库连接,提高性能。通过合理的连接管理和关闭,可以避免过多的连接开销。 10. **数据验证**:在源代码中,你可能看到对用户输入数据的验证,确保数据的完整性和安全性。 ...

    ado.net 连接数据库封装

    在给定的代码片段中,可以看到多个`using`语句,这些语句引入了ADO.NET相关的命名空间,比如`System.Data.SqlClient`用于与SQL Server数据库交互,而`System.Configuration`则用来读取配置文件中的连接字符串。...

    ADO.NET操作数据库

    ### ADO.NET操作数据库知识点详解 #### 一、概述 ADO.NET是Microsoft提供的一套用于访问和操作数据库的API,广泛应用于.NET Framework中。通过ADO.NET,开发人员能够高效地与各种类型的数据库进行交互,包括SQL ...

    ADO.net所有知识点总结及用法

    了解何时使用DataSet、DataReader或异步操作,以及如何正确处理连接池,都是提升ADO.NET应用程序性能的关键。 以上就是ADO.NET的主要知识点和用法,掌握这些将有助于理解如何高效地访问和操作数据库。在实际开发中...

    ado.net简单数据库

    在提供的"database"压缩包文件中,可能包含了示例数据库文件、示例代码或者数据库连接字符串等资源,这些都可以帮助初学者更好地理解和实践ADO.NET的使用。 总结起来,ADO.NET为.NET开发者提供了强大且灵活的数据库...

    ADO.NET深入浅出

    我们将学习如何处理ADO.NET中的异常,并了解连接池的概念和作用,以及如何优化数据库连接池的使用。 第十讲: LINQ to SQL与Entity Framework 虽然ADO.NET是基础,但现代.NET开发更多使用LINQ to SQL和Entity ...

    ADO.NET 4 入门到精通源代码

    8. **调试和性能调优**:学习这些源代码还能了解如何在出现问题时进行调试,以及如何优化ADO.NET应用程序的性能,比如使用连接池、批量操作和预编译SQL命令等。 9. **数据验证**:在ADO.NET 4中,可以利用...

    ADO.NET数据库访问技术案例教程

    例如,创建一个登录系统,通过ADO.NET连接数据库验证用户名和密码,或者实现数据的增删改查操作。 本教程的案例部分将深入讲解以上知识点,并通过具体的代码示例,帮助学习者理解和应用ADO.NET进行数据库访问。案例...

    ADO.Net[面试问题]面试题目

    面试中可能会询问如何处理连接池,以优化资源使用和提高性能。 3. Command对象:理解如何使用Command对象执行SQL查询、更新和删除操作。了解参数化查询的重要性,它可以防止SQL注入攻击并提高代码可读性。 4. ...

    ADO.net数据访问技术系列(王然)

    本系列教程由专家王然讲解,涵盖了ADO.NET数据访问技术的基础到高级应用,包括连接池的使用、不同连接方式、连接字符串的安全管理以及课程的总体概览。 首先,我们来看“01 ADO.NET数据访问技术系列课程概览”。这...

    ADO.NET 开发高手线上教学课程

    以下将详细解析ADO.NET的核心知识点,结合课程中可能涵盖的章节内容进行深入探讨。 1. **数据访问基础**:课程可能首先介绍数据访问的基础概念,包括数据库连接、命令执行和结果集处理。ADO.NET通过Connection对象...

    asp.net ADO.NET5

    8. **性能优化**:在大量数据处理或高并发场景下,如何有效地利用ADO.NET优化数据库查询和操作,比如使用连接池、批处理和缓存策略,对于提升应用性能有着显著影响。 9. **安全性和身份验证**:在ASP.NET中,安全性...

    分享一套ADO.net试题.

    9. **连接池**:ADO.NET 使用连接池来优化数据库连接的创建和释放。在给定的C#代码中,即使创建了两个 `SqlConnection` 对象,但由于连接池的存在,实际上只创建了一个物理连接。 10. **错误号4060**:SQL Server ...

    ADO.NET-高级编程(中)

    11. **性能优化**: 通过使用批处理、预编译的存储过程、连接池等技术,可以显著提升ADO.NET应用程序的性能。连接池管理数据库连接的创建、使用和释放,降低了创建新连接的开销。 12. **错误处理和事件**: ADO.NET...

    ADO.net数据访问存储

    9. **性能优化**:通过使用连接池、预编译的 SQL 查询和批量操作,可以显著提高 ADO.NET 的性能。连接池减少了创建和销毁数据库连接的成本,而预编译的 SQL 可以加快执行速度。 10. **数据绑定**:ADO.NET 可以轻松...

    ADO.NET考核知识点

    8. **打开和关闭连接**:在ADO.NET中,数据库连接的管理和释放非常重要,及时关闭连接可以有效利用连接池资源,防止资源耗尽。 9. **连接池**:连接池是数据库连接管理机制,用于重用已建立的连接,减少创建和销毁...

Global site tag (gtag.js) - Google Analytics