C#的通用DbHelper类(支持数据连接池)示例详解

C#的通用DbHelper类(支持数据连接池)示例详解

1. 概述

DbHelper是一种常用的C#代码封装方式,它用于简化数据库操作的代码,提高代码的可读性、可维护性,减少开发者的工作量。本文将详细介绍如何编写一个通用的DbHelper类,可以支持数据连接池,方便多个线程同时进行数据库操作。

2. 数据库连接配置

为了使DbHelper类支持数据连接池,我们需要在配置文件中添加相应的配置项。格式如下:

<connectionStrings>
  <add name="MyConnectionString" connectionString="Data Source=myServerAddress;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;Connect Timeout=30;Pooling=true;Max Pool Size=100;" providerName="System.Data.SqlClient"/>
</connectionStrings>

其中,连接字符串中“Pooling=true;”表示开启连接池,“Max Pool Size=100;”表示连接池的最大连接数为100。

3. DbHelper类的实现

在C#中,我们可以通过封装数据访问组件来实现DbHelper类,下面提供一个完整的示例:

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace DB
{
    public class DbHelper
    {
        private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;

        private static readonly SqlConnection Connection = new SqlConnection(ConnectionString);

        private static readonly object Lock = new object();

        public static IDbConnection CreateConnection()
        {
            if (Connection.State == ConnectionState.Closed)
            {
                lock (Lock)
                {
                    if (Connection.State == ConnectionState.Closed)
                    {
                        Connection.Open();
                    }
                }
            }

            var newConnection = Connection.Clone();
            newConnection.State = ConnectionState.Closed;

            return newConnection;
        }

        public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
        {
            using (var connection = CreateConnection())
            using (var command = new SqlCommand(sql, (SqlConnection)connection))
            {
                command.Parameters.AddRange(parameters);
                var adapter = new SqlDataAdapter(command);
                var dataTable = new DataTable();

                lock (Lock)
                {
                    adapter.Fill(dataTable);
                }

                return dataTable;
            }
        }
    }
}

通过上面的实现,我们可以在任何需要操作数据库的地方使用DbHelper类,下面给出两个示例:

示例1:查询数据

using System;
using System.Data.SqlClient;

namespace DB
{
    class Program
    {
        static void Main(string[] args)
        {
            var sql = "SELECT * FROM Table1 WHERE Name=@Name";
            var parameters = new[]
            {
                new SqlParameter("Name", "Tom")
            };

            var result = DbHelper.ExecuteDataTable(sql, parameters);

            Console.WriteLine(result.Rows.Count);
        }
    }
}

示例2:更新数据

using System;
using System.Data.SqlClient;

namespace DB
{
    class Program
    {
        static void Main(string[] args)
        {
            var sql = "UPDATE Table1 SET Name=@Name WHERE Id=@Id";
            var parameters = new[]
            {
                new SqlParameter("Name", "Jack"),
                new SqlParameter("Id", 1)
            };

            DbHelper.ExecuteDataTable(sql, parameters);

            Console.WriteLine("Update success");
        }
    }
}

4. 总结

通过本文的介绍,我们了解到了如何编写一个通用的DbHelper类,可以支持数据连接池,方便多个线程同时进行数据库操作。通过封装数据访问组件,我们可以大大简化数据库操作的代码,提高代码的可读性、可维护性,减少开发者的工作量。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#的通用DbHelper类(支持数据连接池)示例详解 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • ASP.NET CORE WEBAPI 登录 JWT 鉴权 ,接口权限验证

    JWT的简单使用 介绍 当今Web开发中,API的使用越来越广泛,而API的安全性也变得越来越重要。其中,JWT(JSON Web Token)鉴权和授权是一种常见的解决方案。 本篇文章将会介绍JWT鉴权和授权的原理、实现方式以及注意事项。 什么是JWT? JWT是一种基于JSON格式的开放标准(RFC7519),用于在网络上传递声明信息的一种简洁、自包含的…

    C# 2023年4月22日
    00
  • C#使用selenium实现爬虫

    下面是详细讲解“C#使用selenium实现爬虫”的完整攻略: 一、什么是selenium selenium是一个自动化测试工具,能够模拟用户在浏览器中的操作。它支持多种编程语言,包括Java、Python、C#等,并且可以操作多种浏览器(包括Chrome、Firefox、Safari等)。在爬虫领域,selenium可以模拟用户操作,对JavaScript…

    C# 2023年5月15日
    00
  • C#获取关键字附近文字算法实例

    C#获取关键字附近文字算法实例 前言 当我们需要从大量文本中查找特定关键字时,有时候我们还需要查看关键字附近的文本内容来更好地理解其上下文。这就需要通过算法来实现获取关键字附近文字,本文将介绍一种通过C#实现的算法。 实现思路 目标:获取字符串中与关键词相邻的部分字符串。 实现: 将字符串按照关键词分割成数组aString 遍历数组,查找关键词对应的元素位置…

    C# 2023年6月7日
    00
  • c# rsa加密解密详解

    C# RSA加密解密详解 什么是RSA RSA是一种非对称加密算法,通过一个密钥对(公钥和私钥)来实现加密解密。公钥可以公开,用于加密数据;私钥用于解密加密后的数据。 RSA加密解密步骤 随机生成一对RSA密钥(公钥和私钥) 使用公钥对明文进行加密得到密文 使用私钥对密文进行解密得到明文 C#实现RSA加密解密 生成密钥对 在C#中可以使用RSACrypto…

    C# 2023年5月15日
    00
  • Vue与.net Core 接收List<T>泛型参数

    Vue与.NET Core接收List泛型参数攻略 在Vue和.NET Core应用程序之间进行数据交互时,有时需要传递List泛型参数。本文将介绍如何在Vue和.NET Core应用程序之间接收List泛型参数,以及如何在Vue中使用axios库发送请求。 步骤 步骤1:在Vue中使用axios库发送请求 首先,我们需要在Vue中使用axios库发送请求。…

    C# 2023年5月17日
    00
  • BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面

    一、BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面攻略 背景简介 BootstrapTable是一款功能强大的jQuery表格插件,支持前端排序、分页、筛选等功能,使用方便,快捷。KnockoutJS是一个MVVM框架,可以自动更新页面中数据和DOM元素的状态。而自定义T4模板则是使用Visual Studio的代码生成…

    C# 2023年5月31日
    00
  • 基于C#的socket编程的TCP异步的实现代码

    下面我将为您详细介绍基于 C# 的 Socket 编程的 TCP 异步实现代码的攻略。 1. 使用 Socket 类 在 C# 中,可以使用 Socket 类来实现网络编程。 创建 Socket:使用 Socket 类的 Socket 方法可以创建一个新的 Socket 对象。 绑定端口:使用 Bind 方法将端口与 Socket 关联起来。 开始监听:使用…

    C# 2023年5月15日
    00
  • C# #define条件编译详解

    C# #define条件编译详解 什么是条件编译 在编写程序时,我们经常会遇到需要根据不同条件编译不同代码的情况,这就是条件编译(Conditional Compilation)。 C#提供了一种条件编译指令,叫做#define,它可以在编译程序时根据指定的条件判断是否编译某段代码。使用#define指令可以在程序中定义符号,在编译程序时可以根据这些符号来判…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部