c# SqlDataAdapter中的Fill是怎么实现的

SqlDataAdaoter 中的 Fill 方法实现机制浅析 SqlDataAdapter 中的 Fill 方法是一个非常重要的方法,它负责从数据库中提取数据并将其填充到 DataTable 中。今天,我们将深入探索 Fill 方法的实现机制,并了解其内部是如何工作的。 让我们来看看 Fill 方法的签名: ```csharp public int Fill(DataTable dataTable) ``` 可以看到,Fill 方法需要一个 DataTable 对象作为参数,它将数据填充到这个对象中。 接下来,让我们使用 dnspy 工具来查看 Fill 方法的源代码: ```csharp public int Fill(DataTable dataTable) { IntPtr intPtr; Bid.ScopeEnter(out intPtr, "<comm.DbDataAdapter.Fill|API> %d#, dataTable\n", base.ObjectID); int result; try { DataTable[] dataTables = new DataTable[] { dataTable }; IDbCommand selectCommand = this._IDbDataAdapter.SelectCommand; CommandBehavior fillCommandBehavior = this.FillCommandBehavior; result = this.Fill(dataTables, 0, 0, selectCommand, fillCommandBehavior); } finally { Bid.ScopeLeave(ref intPtr); } return result; } ``` 从上面的代码可以看到,Fill 方法的实现非常复杂,它需要调用多个其他方法来完成数据填充。它创建了一个 DataTable 数组,并将传入的 dataTable 对象添加到这个数组中。 然后,它获取了 IDbCommand 对象,这个对象来自于 SqlDataAdapter 的 SelectCommand 属性。这个属性是在创建 SqlDataAdapter 对象时设置的: ```csharp public SqlDataAdapter(SqlCommand selectCommand) : this() { this.SelectCommand = selectCommand; } ``` 因此,可以看到 Fill 方法的实现是非常复杂的,它需要调用多个其他方法来完成数据填充。 继续往下追踪 Fill 方法,我们可以看到它调用了 FillInternal 方法: ```csharp protected virtual int Fill(DataTable[] dataTables, int startRecord, int maxRecords, IDbCommand command, CommandBehavior behavior) { result = this.FillInternal(null, dataTables, startRecord, maxRecords, null, command, behavior); return result; } ``` FillInternal 方法是 Fill 方法的核心实现部分,它负责将数据从数据库中提取出来并填充到 DataTable 中。 FillInternal 方法的实现非常复杂,它需要调用多个其他方法来完成数据填充。它需要创建一个 SqlDataReader 对象,以便从数据库中读取数据: ```csharp private int FillInternal(DataSet dataset, DataTable[] datatables, int startRecord, int maxRecords, string srcTable, IDbCommand command, CommandBehavior behavior) { int result = 0; // ... SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection); // ... } ``` 然后,它使用 SqlDataReader 对象来读取数据,并将其填充到 DataTable 中: ```csharp while (reader.Read()) { // ... DataRow row = datatables[0].NewRow(); // ... row["column1"] = reader["column1"]; row["column2"] = reader["column2"]; // ... datatables[0].Rows.Add(row); } ``` 可以看到,Fill 方法的实现非常复杂,它需要调用多个其他方法来完成数据填充。但是,通过查看源代码,我们可以了解 Fill 方法的内部实现机制,并更好地理解其工作原理。





























- H等等H2023-06-20,但是这个标题并没有提供足够的信息,我无法理解这个项目的具体内容和目的。请提供更多的细节和背景,这样我才能更好地为你服务。

- 粉丝: 7
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 城市轨道交通深基坑地下连续墙施工工艺.ppt
- WEB应用与开发专业林世钺开题分析方案.doc
- 北京某会议中心项目装载机安全技术交底.doc
- 小区基坑支护招标工程技术条件及要求.doc
- STM32F1产品技术培训_STM32F10x 通信模块介绍.pdf
- ISO9001条文解说与举例论证-A.doc
- STM32 云接入培训_4.2_后端服务开发.pdf
- 清华辰安JAVA项目---网络版JQ.doc
- STM32F2产品技术培训_安全数字输入输出接口模块(SDIO)介绍.pdf
- STM32WB培训_STM32WB硬件_软件_BLE低功耗设计及速率优化.pdf
- 重庆某地产设计管理高级讲座(2010年).ppt
- 互联网+与数学教学的融合策略探研.docx
- 北京某医院工程旁站监理方案.doc
- STM32L1产品技术培训:实时时钟模块RTC介绍.pdf
- 网络信息技术在施工企业项目财务管理中的应用.docx
- 计算机维护中的常见故障及解决措施分析.docx


