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日

相关文章

  • WinForm中comboBox控件数据绑定实现方法

    WinForm中的comboBox控件是一种常用的下拉选择框控件,可以让用户从预设的选项中选择一项或输入自定义内容。下面将详细介绍如何实现comboBox控件的数据绑定。 1. 绑定数据源 首先,需要将comboBox控件绑定到需要显示的数据源。可以通过WinForm设计器中的属性窗口完成这个操作。步骤如下: 步骤1:打开WinForm设计器 在Visual…

    C# 2023年6月7日
    00
  • C# 未将对象引用设置到对象的实例

    问题描述当我们在C#代码中遇到一个Null引用时,会提示“未将对象引用设置到对象的实例”错误。这个错误提示常常是因为我们的代码尝试操作一个不存在的对象实例引起的,那么该如何解决呢? 处理过程1. 检查代码 解决这个错误的第一步是检查代码,找出引起这个错误的具体语句。我们需要确定代码中哪一个对象为空,然后比对代码逻辑,查看是否出现了对象为NULL时的情况。比如…

    C# 2023年5月15日
    00
  • AspNetCore&MassTransit Courier实现分布式事务的详细过程

    以下是“AspNetCore&MassTransitCourier实现分布式事务的详细过程”的完整攻略: 什么是分布式事务 分布式事务是指跨多个数据库或应用程序的事务。在分布式系统中,由于数据存储在不同的地方,因此需要确保所有数据的一致性。分布式事务可以确保所有数据的一致性,即使在发生故障的情况下也能保持数据的一致性。 AspNetCore&…

    C# 2023年5月12日
    00
  • c# 实现文件上传下载功能的实例代码

    实现文件上传和下载功能是很常见的需求,在C#中实现这样的功能并不困难。 上传文件 实现过程 选择一个合适的 form 布局,使得用户可以方便地选择文件,并设计好交互流程。 在后台代码中,需要通过 HttpPostedFileBase 类型接收表单上传的文件。可以通过以下代码来实现文件上传的操作: [HttpPost] public ActionResult …

    C# 2023年5月31日
    00
  • C# String.Concat()方法: 连接多个字符串

    C#的String.Concat()方法 String.Concat是C#中的一个字符串拼接方法,它可以将两个或多个字符串连接在一起,拼接后的结果是一个新的字符串。String.Concat方法位于System.String类中,因此可以通过字符串对象调用该方法。 使用方法 String.Concat方法可以接受多个参数,每个参数可以是一个字符串或者一个对象…

    C# 2023年4月19日
    00
  • C#中的反射(System.Reflection)

    下面是针对“C#中的反射(System.Reflection)”的完整攻略。 什么是反射 反射是一种在运行时获取类型信息和操作对象的方法。它允许程序在运行时发现和调用在编译时未知的类型、方法和属性。利用反射,您可以: 获取程序集、模块和类型的元数据 创建类型的实例、操作成员、获取在许多情况下是编译时未知的属性和字段值 反射在许多场合被使用,如: 在运行时加载…

    C# 2023年5月15日
    00
  • NetCore 配置Swagger的详细代码

    以下是“NetCore配置Swagger的详细代码”的完整攻略: 什么是Swagger Swagger是一种API文档生成工具,它可以自动生成API文档,并提供一个交式UI,使开人员可以轻松地测试API。 配置Swagger的详细代码 配置Swagger的详细代码包括以下步骤: 安装Swashb.AspNetCore NuGet包。 在Startup.cs文…

    C# 2023年5月12日
    00
  • C# 获取PDF中的数字签名证书

    下面是详细的“C# 获取PDF中的数字签名证书”的攻略: 什么是数字签名证书 数字签名证书,是指用数字方式来证实文档或数据的真实性、完整性、不可否认性的一种电子证书。 获取PDF中的数字签名证书 我们可以通过以下步骤来获取PDF中的数字签名证书: 步骤一:安装iTextSharp iTextSharp是C#的一个PDF处理库,我们需要先在项目中安装iText…

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