上一篇中我们可以看出Fill方法最后都调用FillFromCommand和FillFromReader方法。 那我们接着探讨FillFromCommand方法 private int FillFromCommand(object data, int startRecord, int maxRecords, string srcTable, IDbCommand command, CommandBehavior behavior) { IDbConnection connection1 = DbDataAdapter.GetConnection(command, "Fill");//返回connection ConnectionState state1 = ConnectionState.Open; if (MissingSchemaAction.AddWithKey == base.MissingSchemaAction)
//添加必需的列和主键信息以完成架构。
{ behavior |= CommandBehavior.KeyInfo; } int num1 = 0; try { try { DbDataAdapter.QuietOpen(connection1, out state1);//打开连接 using (IDataReader reader1 = command.ExecuteReader(behavior | CommandBehavior.SequentialAccess))//读取数据 { if (data is DataTable) { num1 = this.Fill((DataTable) data, reader1);//这个方法我们已经
//说过它最后调用FillFromReader(dataTable, null, dataReader, 0, 0, null, null);
} else { num1 = this.Fill((DataSet) data, srcTable, reader1, startRecord, maxRecords);
//这个方法最后调用 return this.FillFromReader(dataSet, srcTable, dataReader,
//startRecord, maxRecords, null, null);
} } } finally { DbDataAdapter.QuietClose(connection1, state1);//关闭连接 } } catch { throw; } return num1; } 这是就不难看出FillFromCommand其实也是在调用了FillFromReader,也就是说Fill方法的所有操作将由FillFromReader方法来完成。
看看FillFromReader方法: internal int FillFromReader(object data, string srcTable, IDataReader dataReader, int startRecord, int maxRecords, DataColumn parentChapterColumn, object parentChapterValue) { int num1 = 0; int num2 = 0;//schemaCount Label_0004: if (0 < dataReader.FieldCount) { SchemaMapping mapping1 = this.FillSchemaMappingTry(data, srcTable, dataReader, num2, parentChapterColumn, parentChapterValue);//创建结构映射 num2++; if (((mapping1 != null) && (mapping1.DataValues != null)) && (mapping1.DataTable != null)) { try { mapping1.DataTable.BeginLoadData();//加载数据时关闭通知、索引维护和约束 try { if ((1 == num2) && ((0 < startRecord) || (0 < maxRecords))) { num1 = this.FillLoadDataRowChunk(mapping1, startRecord, maxRecords);//填充从
//startRecord开始的maxRecords条记录,并返回记录个数 } else { int num3 = this.FillLoadDataRow(mapping1);//填充数据 if (1 == num2) {
[1] [2] [3] [4] 下一页 [办公软件]在sybase中插入图片、PDF、文本文件 [办公软件]安装Sybase ASE [办公软件]linux指令大全(完整篇) [办公软件]Linux新手入门常用命令大全 [办公软件]在RedHat Linux 9里安装gaim0.80 [办公软件]浅谈Linux 下Java 1.5 汉字方块问题解决方法 [办公软件]Linux程序员必读:中文化与GB18030标准 [办公软件]linux指令大全 [办公软件]制作Linux启动盘的四种方法 [办公软件]Linux文件系统的反删除方法
|