num1 = num3; } } } finally { mapping1.DataTable.EndLoadData();//数据加载后打开通知、索引维护和约束。 } } catch { throw; } } } if (!this.FillNextResult(dataReader))//判断dataReader中是否还有记录 { return num1; } goto Label_0004; } 其实到这里我们已经对fill有个总体了解,首先不管fill重载多少次它都是最后调用FillFromReader方法,在FillFromReader中先创建结构映射,然后填充数据。 接着看看结构影射,这个很复杂,请朋友们多多指教。 //结构影射 private SchemaMapping FillSchemaMappingTry(object data, string srcTable, IDataReader dataReader, int schemaCount, DataColumn parentChapterColumn, object parentChapterValue) { SchemaMapping mapping1 = null; if (this.hasFillErrorHandler) { try { mapping1 = this.FillSchemaMapping(data, srcTable, dataReader, schemaCount, parentChapterColumn, parentChapterValue); } catch (Exception exception1) { this.FillErrorHandler(exception1, null, null); } } else { mapping1 = this.FillSchemaMapping(data, srcTable, dataReader, schemaCount, parentChapterColumn, parentChapterValue); } return mapping1; } //FillSchemaMapping private SchemaMapping FillSchemaMapping(object data, string srcTable, IDataReader dataReader, int schemaCount, DataColumn parentChapterColumn, object parentChapterValue) { SchemaMapping mapping1 = new SchemaMapping(this, dataReader, MissingSchemaAction.AddWithKey == base.MissingSchemaAction);//创建SchemaMapping实例 //成员名称 说明 //MissingSchemaAction: // Add 添加必需的列以完成架构。 // AddWithKey 添加必需的列和主键信息以完成架构。有关如何将主键信息添加到 DataTable 的更多信息,请参见 FillSchema。 // Error 如果缺少指定的列映射,则生成 InvalidOperationException。 // Ignore 忽略额外列。
string text1 = null; if (data is DataTable) { mapping1.DataTable = (DataTable) data; } else { mapping1.DataSet = (DataSet) data; text1 = DbDataAdapter.GetSourceTableName(srcTable, schemaCount);//DataSet中要创建表的名称 /** *internal static string GetSourceTableName(string srcTable, int index) *{ * if (index == 0) * { * return srcTable; *} * return (srcTable + index.ToString()); * } **/
} mapping1.SetupSchema(SchemaType.Mapped, text1, true, parentChapterColumn, parentChapterValue);// /* * * public enum SchemaType *{ * // Fields * Mapped = 2, 将任何现有的表映射应用到传入架构,用转换的架构配置 DataSet。 * Source = 1 忽略 DataAdapter 上的任何表映射。使用传入架构配置 DataSet,而不应用任何转换。 * } **/
&nbs 上一页 [1] [2] [3] [4] 下一页 |