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技术站