• C# 数据库连接池


    今天2019-9-19,我在江苏镇江这个城市读了四年的大学,并且工作了两三个月,明天晚上,我就踏上了离开的镇江的旅途,寻找新的工作。

    在最后这个的夜晚,和老徐,子健,啊韬去喝了鸡汤,还去了一趟江苏大学,看看这个生活了四年的学校,也不知道什么时候我会再回来这里。

    在这里打个卡,留念一下这个学校和这座城市,也许,以后真滴穷的都没钱买车票回来,哈哈哈。

    数据库连接池

    关于数据库连接池,我今天才知道这个东西,不过幸运的是我知道了,我在网上看到不错的介绍,在这里我做个笔记:

    关于数据库连接池介绍连接:

    https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%B1%A0/1518538(百度百科)

    https://www.cnblogs.com/champaign/p/6548325.html

    https://www.cnblogs.com/supersnowyao/p/8652722.html

    下面是看了上面的介绍做的笔记,如果想要了解更加详细的知识,请到上面的连接。

    连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等(来源于百度百科,很清晰)

    为什么要使用数据库连接池?这个问题有点像线程和线程池的区别,不断地反复连接数据库会造成更长的总的响应时间和消耗更多的系统资源,轻微的可能造成服务器卡顿,严重的可能会死机。

    使用数据库连接池的基本步骤:

    1.必须与服务器进行初次连接;2.必须分析连接字符串信息;3.必须由服务器对连接对象进行身份的验证;4.必须建立物理通道(套间字或者命名管道)。

    数据库连接池的代码案例:

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace 控制台临时代码
    {
        class Class1
        {
            private SqlConnection m_sqlConnection;
            public Class1()
            {
                m_sqlConnection = new SqlConnection(GetStrSql());
            }
            // 构造连接池字符串
            private string GetStrSql()
            {
                // pooling:用来设置是否开启连接池,默认为true
                // connection lifetime:设置连接池的生命周期,默认为0
                // min pool size:线程池的最小连接数
                // max pool size:线程池的最大连接数
                // Data Source:服务器地址(Server)
                // Initial Catalog:数据库(database)
                // User ID:用户ID(uid)
                // Password:密码(pwd)
                //return "pooling=true;connection lifetime=5;min pool size = 2;max pool size=4; Data Source = 127.0.0.1; Initial Catalog = tempdb; User ID = sa; Password=123456";
                // AsynchronousProcessing 设置异步访问数据库
                // ConnectTimeout 设置连接等待时间
                return "server=localhost;integratedsecurity=sspi;database=onlyTable;MaxPoolSize=4;MinPoolSize=2;ConnectTimeout=5;ConnectionLifetime=5;AsynchronousProcessing=true;";
            }
            public DataTable GetDataReader(string a_StrSql)//数据查询,连接池接口
            {
                // 判断数据库的状态
                if (m_sqlConnection.State == ConnectionState.Open)
                {
                    m_sqlConnection.Close();  // 关闭
                }
                try
                {
                    m_sqlConnection.Open();
                    SqlCommand l_sqlCommand = new SqlCommand(a_StrSql,m_sqlConnection);
                    SqlDataReader l_sqldatareader = l_sqlCommand.ExecuteReader();
                    if(l_sqldatareader.HasRows)
                    {
                        DataTable l_dt = new DataTable();
                // 如果想使用相同的字符串来访问不同的数据库,可以使用改变数据库:m_sqlconnection.ChangeDatabase(数据库名称); l_dt.Load(l_sqldatareader); l_sqldatareader.Close(); m_sqlConnection.Close();
    return l_dt; } return null; } catch(Exception err) { MessageBox.Show(err.Message); return null; } finally { m_sqlConnection.Close(); } } } }
  • 相关阅读:
    抖动代码
    WSAWaitForMultipleEvents()
    udp 不需要 listen
    WSAEventSelect
    C++ Win32控制台应用程序捕捉关闭事件
    玩转Win32开发(2):完整的开发流程
    win32线程池代码(WinApi/C++)
    又线程类封装
    Win2 Socket(套接字)相关 API
    Win32函数Sleep的精度测试
  • 原文地址:https://www.cnblogs.com/namejr/p/11551033.html
Copyright © 2020-2023  润新知