在ASP.NET项目开发过程中,数据访问层是必不可少的部分,重复编写数据库连接、命令执行、参数处理等代码不仅耗时,还容易出现疏漏。封装一个通用的数据库操作类可以有效解决这些问题,提升代码的复用性和可维护性。

数据库操作类的设计思路
这个操作类主要基于ADO.NET的核心组件实现,核心目标是封装以下常用操作:
- 数据库连接的创建与释放
- 执行增删改操作并返回受影响行数
- 执行查询操作并返回DataTable、DataReader等结果
- 支持参数化查询,避免SQL注入风险
- 支持事务操作,保证数据一致性
核心代码实现
基础配置与连接获取
首先需要在配置文件中定义数据库连接字符串,操作类读取该配置来创建连接:
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
public class DBHelper
{
// 从配置文件读取连接字符串
private static string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
// 获取数据库连接
private static SqlConnection GetConnection()
{
SqlConnection conn = new SqlConnection(connectionString);
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn;
}
}
执行增删改操作的方法
封装无返回结果的增删改方法,支持带参数的SQL语句:
public class DBHelper
{
// 执行增删改操作,返回受影响行数
public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = GetConnection())
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
if (parameters != null && parameters.Length > 0)
{
cmd.Parameters.AddRange(parameters);
}
return cmd.ExecuteNonQuery();
}
}
}
}
查询操作方法
封装返回DataTable和SqlDataReader的查询方法,满足不同场景的查询需求:
public class DBHelper
{
// 执行查询,返回DataTable
public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = GetConnection())
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
if (parameters != null && parameters.Length > 0)
{
cmd.Parameters.AddRange(parameters);
}
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
adapter.Fill(dt);
return dt;
}
}
}
}
// 执行查询,返回SqlDataReader,注意使用后需要手动关闭Reader
public static SqlDataReader ExecuteDataReader(string sql, params SqlParameter[] parameters)
{
SqlConnection conn = GetConnection();
SqlCommand cmd = new SqlCommand(sql, conn);
if (parameters != null && parameters.Length > 0)
{
cmd.Parameters.AddRange(parameters);
}
// CommandBehavior.CloseConnection 保证Reader关闭时自动关闭连接
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
}
事务操作方法
封装事务相关方法,支持多步操作的事务一致性:
public class DBHelper
{
// 执行事务操作,传入多个SQL和参数组
public static bool ExecuteTransaction(string[] sqlArray, SqlParameter[][] paramArray)
{
using (SqlConnection conn = GetConnection())
{
SqlTransaction transaction = conn.BeginTransaction();
try
{
for (int i = 0; i < sqlArray.Length; i++)
{
using (SqlCommand cmd = new SqlCommand(sqlArray[i], conn, transaction))
{
if (paramArray[i] != null && paramArray[i].Length > 0)
{
cmd.Parameters.AddRange(paramArray[i]);
}
cmd.ExecuteNonQuery();
}
}
transaction.Commit();
return true;
}
catch (Exception ex)
{
transaction.Rollback();
throw ex;
}
}
}
}
使用示例
下面演示如何使用这个数据库操作类完成用户添加和查询操作:
// 添加用户示例
string addSql = "INSERT INTO Users (UserName, Age) VALUES (@UserName, @Age)";
SqlParameter[] addParams = {
new SqlParameter("@UserName", "张三"),
new SqlParameter("@Age", 25)
};
int result = DBHelper.ExecuteNonQuery(addSql, addParams);
if (result > 0)
{
Console.WriteLine("用户添加成功");
}
// 查询用户示例
string querySql = "SELECT * FROM Users WHERE Age > @Age";
SqlParameter[] queryParams = {
new SqlParameter("@Age", 20)
};
DataTable userTable = DBHelper.ExecuteDataTable(querySql, queryParams);
foreach (DataRow row in userTable.Rows)
{
Console.WriteLine($"用户名:{row["UserName"]},年龄:{row["Age"]}");
}
注意事项
使用这个操作类时需要注意以下几点:
- 配置文件中的连接字符串名称需要和代码中读取的名称一致,默认是
DefaultConnection - 使用
ExecuteDataReader方法后,需要手动关闭返回的SqlDataReader对象,避免连接泄露 - 参数化查询时,参数名称和SQL中的参数占位符要完全匹配,避免参数绑定错误
- 如果项目需要切换其他数据库,只需要替换对应的ADO.NET驱动和连接、命令类即可,整体结构不需要大改
ASP.NET数据库操作类ADO.NETSQLHelperC#_database修改时间:2026-07-19 04:27:25