如何优化ASP.NET类中重复的数据访问代码?
优化ASP.NET中重复数据库操作代码的方案
当然可以!你提出的提取重复代码到复用函数的思路非常正确,这正是面向对象编程中封装思想的典型应用——不仅能减少代码冗余,还能大幅提升代码的可维护性,以后如果要修改数据库操作逻辑(比如添加错误处理、调整资源管理),只需要改一处就可以覆盖所有调用场景。
具体优化步骤
我们可以把重复的数据库查询逻辑封装成一个私有辅助方法,同时要注意用using语句管理数据库相关资源(SqlConnection、SqlCommand等都实现了IDisposable接口,using会自动帮我们释放资源,比手动调用Close()更安全,能有效避免连接泄漏问题)。
优化后的完整代码
public class Attendance // 类名建议遵循C#的PascalCase命名规范 { private readonly string _connectionString; public Attendance() { // 将连接字符串的读取放到构造函数中,避免重复读取配置文件 _connectionString = WebConfigurationManager.ConnectionStrings["databaseConnection"].ConnectionString; } // 封装的通用查询方法,负责处理所有重复的数据库操作逻辑 private DataTable ExecuteQuery(string query) { var dataTable = new DataTable(); // 使用using块自动管理连接生命周期,无需手动Close using (var connection = new SqlConnection(_connectionString)) { connection.Open(); using (var command = new SqlCommand(query, connection)) { using (var dataAdapter = new SqlDataAdapter(command)) { dataAdapter.Fill(dataTable); } } } return dataTable; } //<employee> public DataTable EmployeeList() // 方法名同样遵循PascalCase规范 { string query = "select * from view_emp_info"; return ExecuteQuery(query); } //</employee> //<promotion> public DataTable PromotionList() { string query = "select * from tbl_emp_promotion_detail order by TDate DESC"; return ExecuteQuery(query); } //</promotion> }
额外的优化建议
- 支持参数化查询:如果后续需要执行带参数的查询(比如根据员工ID查询信息),可以重载
ExecuteQuery方法,支持传入SqlParameter数组,彻底避免SQL注入风险:
private DataTable ExecuteQuery(string query, params SqlParameter[] parameters) { var dataTable = new DataTable(); using (var connection = new SqlConnection(_connectionString)) { connection.Open(); using (var command = new SqlCommand(query, connection)) { if (parameters != null) { command.Parameters.AddRange(parameters); } using (var dataAdapter = new SqlDataAdapter(command)) { dataAdapter.Fill(dataTable); } } } return dataTable; }
- 统一错误处理:可以在封装的
ExecuteQuery方法中添加try-catch块,统一捕获并处理数据库操作中的异常,比如记录日志或者返回友好的错误提示。 - ORM框架进阶:如果项目规模逐渐扩大,后续可以学习使用Entity Framework这类ORM框架,它能进一步简化数据库操作,减少手动编写SQL的工作量,同时提供更强大的对象映射能力。
内容的提问来源于stack exchange,提问作者Sovit Maharjan
相关产品推荐
相关产品推荐

