2026/4/17 4:49:57
网站建设
项目流程
建站网站方法,网站建设 部署与发布,网站范例,网页设计常见模块在 C# 开发中#xff0c;和数据库打交道是家常便饭#xff0c;而 ADO.NET 就是我们操作数据库的“得力助手”。
它的核心对象各司其职#xff0c;搭配起来即可完成数据的 增、删、改、查。
本文将系统梳理 ADO.NET 的核心对象、协作流程#xff0c;并提供 完整可用的分页查…在 C# 开发中和数据库打交道是家常便饭而ADO.NET就是我们操作数据库的“得力助手”。它的核心对象各司其职搭配起来即可完成数据的增、删、改、查。本文将系统梳理 ADO.NET 的核心对象、协作流程并提供完整可用的分页查询实战代码非常适合作为学习笔记或博客文章直接发布。一、ADO.NET 核心对象一个都不能少ADO.NET 的数据库操作围绕以下几个核心对象展开它们分工明确、各司其职。1️⃣ Connection —— 数据库的“连接器”作用负责建立应用程序与数据库之间的物理连接没有它所有数据库操作都无法进行。常用方法Open()打开数据库连接Close()关闭数据库连接Close vs Dispose 的区别方法说明Close()关闭连接但对象仍可再次Open()Dispose()释放所有资源对象不可再使用✅最佳实践使用using语句自动释放资源。2️⃣ Command —— 数据库的“指令官”作用依附于Connection用于向数据库发送 SQL 指令或调用存储过程。核心属性CommandTextSQL 语句或存储过程名Connection关联的数据库连接CommandTypeText/StoredProcedure常用方法ExecuteNonQuery()执行增删改返回受影响行数ExecuteScalar()返回第一行第一列的值ExecuteReader()返回DataReader3️⃣ DataAdapter —— 数据的“搬运工”作用连接数据库与DataSet的桥梁负责数据的读取与回写。核心方法Fill()从数据库填充 DataSetUpdate()将 DataSet 的更改同步回数据库 特点无需手动管理连接Fill()会自动打开并关闭连接4️⃣ DataSet —— 内存中的“数据库副本”作用用于在内存中暂存数据完全脱离数据库连接进行操作。组成结构DataSet ├── DataTable │ ├── DataRow │ └── DataColumn优势支持离线操作可保存表结构、主键、表关系适合复杂业务处理5️⃣ DataReader —— 高性能“数据阅读器”适用场景只读、高性能、顺序读取数据。核心特点只读ReadOnly只进ForwardOnly极低内存占用⚠️ 注意事项使用期间Connection 必须保持打开读取完成后必须及时关闭连接二、ADO.NET 核心对象协作流程完整的数据库操作流程如下使用Connection打开数据库连接使用Command或DataAdapter执行 SQL查询结果快速读取 →DataReader离线操作 →DataSet / DataTable执行业务逻辑处理三、实战示例ADO.NET 分页查询完整版以下示例基于ROW_NUMBER()实现分页包含参数化 SQLDataSet 查询DataTable 转实体1️⃣ 业务层分页入口publicListBooksGetPageList(intpageIndex,intpageSize){intstart(pageIndex-1)*pageSize1;intendpageIndex*pageSize;DataSetdsdal.GetPageList(start,end);returnDataTableToList(ds.Tables[0]);}2️⃣ 数据访问层分页 SQLpublicDataSetGetPageList(intstart,intend){stringsql SELECT * FROM ( SELECT *, ROW_NUMBER() OVER(ORDER BY Id) AS Num FROM Books ) t WHERE t.Num start AND t.Num end;SqlParameter[]ps{newSqlParameter(start,SqlDbType.Int),newSqlParameter(end,SqlDbType.Int)};ps[0].Valuestart;ps[1].Valueend;returnSqlHelper.Query(sql,CommandType.Text,ps);}3️⃣ DataTable → 实体列表publicListBooksDataTableToList(DataTabledt){ListBookslistnewListBooks();foreach(DataRowrowindt.Rows){BooksmodelnewBooks();model.Idrow[Id]!DBNull.Value?Convert.ToInt32(row[Id]):0;model.Titlerow[Title].ToString();model.Authorrow[Author].ToString();model.ISBNrow[ISBN].ToString();if(row[PublishDate]!DBNull.Value)model.PublishDateConvert.ToDateTime(row[PublishDate]);if(row[UnitPrice]!DBNull.Value)model.UnitPriceConvert.ToDecimal(row[UnitPrice]);list.Add(model);}returnlist;}四、ADO.NET 实战优化技巧必看✅ 1. 使用配置文件管理连接字符串App.config / Web.config避免硬编码方便环境切换✅ 2. 封装 SqlHelper 工具类统一管理 Connection / Command减少重复代码提高可维护性✅ 3. 坚决使用参数化查询防止 SQL 注入提升 SQL 执行计划复用率✅ 4. using 语句释放资源using(SqlConnectionconnnewSqlConnection(connStr)){conn.Open();...}五、总结ADO.NET 虽然不像 EF Core 那样“开箱即用”但它是所有 ORM 框架的底层基础。理解 ADO.NET 理解数据库访问本质会 ADO.NET ORM 再复杂也不慌