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日

相关文章

  • C#异步调用示例详解

    下面是关于“C#异步调用示例详解”的完整攻略,包含两个示例。 1. C#异步调用简介 在C#中,可以使用异步调用来执行长时间运行的操作,例如网络请求或数据库查询。异步调用可以提高应用程序的响应性能,因为它允许应用程序在等待操作完成时继续执行其他任务。 2. 使用async和await关键字进行异步调用 可以使用async和await关键字来执行异步调用。以下…

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

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

    C# 2023年6月1日
    00
  • ASP.NET Core中Razor页面的Handlers处理方法详解

    ASP.NET Core中Razor页面的Handlers处理方法详解 在ASP.NET Core中,Razor页面是一种用于创建Web应用程序的强大工具。Razor页面可以使用C#代码和HTML标记来创建动态Web页面。Handlers是一种用于处理Razor页面中的表单提交和其他用户交互的方法。本攻略将提供一些示例,演示如何在ASP.NET Core中使…

    C# 2023年5月17日
    00
  • 使用.NET升级助手将.NET Framework项目升级为.NET 6

    使用.NET升级助手将.NET Framework项目升级为.NET 6 本攻略将介绍如何使用.NET升级助手将.NET Framework项目升级为.NET 6。以下是完整的攻略步骤。 步骤 步骤1:安装.NET升级助手 首先,需要安装.NET升级助手。可以使用以下命令在命令行中安装.NET升级助手: dotnet tool install -g upgr…

    C# 2023年5月17日
    00
  • C#实现简单学生成绩管理系统

    C#实现简单学生成绩管理系统 一、需求分析 本系统是一个简单的学生成绩管理系统,包括学生信息录入,成绩录入,成绩查询和统计等功能。软件运行需求:.Net Framework 4.0以上 二、技术选型 编程语言:C# 数据库:MS SQL Server 开发环境:Visual Studio 2017以上版本 三、数据库设计 本系统需要一个用于存储学生信息和成绩…

    C# 2023年6月3日
    00
  • C#很简单而又很经典的一句代码实例

    当谈到 C# 语言的简洁性和经典性时,有一些令人惊艳的代码实例。以下是两个示例: 示例一:使用 LINQ 进行筛选 LINQ(Language-Integrated Query)是在 C# 中进行数据查询和操作的一种方式。在 LINQ 中,您可以使用像 SQL 语句一样的查询语法来筛选出特定的数据。下面是一段使用 LINQ 筛选出数字列表中所有偶数的代码: …

    C# 2023年5月15日
    00
  • 在WCF数据访问中使用缓存提高Winform字段中文显示速度的方法

    下面是关于“在WCF数据访问中使用缓存提高Winform字段中文显示速度的方法”的完整攻略,包含两个示例。 1. 什么是缓存 缓存是一种将数据存储在内存中的技术,可以提高数据访问速度。缓存可以减少对数据库的访问次数,从而提高应用程序的性能。 2. 在WCF数据访问中使用缓存的步骤 以下是在WCF数据访问中使用缓存的步骤: 创建缓存对象。 将数据存储到缓存中。…

    C# 2023年5月15日
    00
  • javascript KeyDown、KeyPress和KeyUp事件的区别与联系

    JavaScript中的KeyDown、KeyPress和KeyUp都是键盘事件,但它们有着不同的用途和特点。 1. KeyDown事件 当用户在页面中按下键盘上的任意一个键时,就会触发KeyDown事件。KeyDown事件可以同时捕获特殊键,例如Ctrl、Shift、Alt、Tab等,还可以捕获功能键(F1~F12)。 下面是一个演示用JS实现监听按键功能…

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