Let's look at all the members of the SqlDataAdapter of public sealed class SqlDataAdapter: DbDataAdapter, IDbDataAdapter, IDataAdapter, ICloneable {// Events public event SqlRowUpdatedEventHandler RowUpdated; public event SqlRowUpdatingEventHandler RowUpdating;
// Methods public SqlDataAdapter (); public SqlDataAdapter (SqlCommand selectCommand); private SqlDataAdapter (SqlDataAdapter adapter); public SqlDataAdapter (string selectCommandText, SqlConnection selectConnection); public SqlDataAdapter (string selectCommandText, string selectConnectionString); protected override RowUpdatedEventArgs CreateRowUpdatedEvent (DataRow dataRow, IDbCommand command, statementType statementType, DataTableMapping tableMapping); protected override RowUpdatingEventArgs CreateRowUpdatingEvent (DataRow dataRow, IDbCommand command, statementType statementType, DataTableMapping tableMapping); protected override void Dispose (bool disposing); protected override void OnRowUpdated (RowUpdatedEventArgs value); protected override void OnRowUpdating (IdbCommand idbdataadapter.get_deletecommand (); idbcommand idbdataadapter.get_insertcommand (); idbcommand idbdataadapter.get_selectcommand (); IDbCommand IDbDataAdapter.get_UpdateCommand (); void IDbDataAdapter.set_DeleteCommand (IDbCommand value); void IDbDataAdapter.set_InsertCommand (IDbCommand value); void IDbDataAdapter.set_SelectCommand (IDbCommand value); void IDbDataAdapter.set_UpdateCommand (IDbCommand value); object ICloneable.Clone ();
// Properties public SqlCommand DeleteCommand {get; set;} public SqlCommand InsertCommand {get; set;} public SqlCommand SelectCommand {get; set;} public SqlCommand UpdateCommand {get; set;} // Fields private SqlCommand cmdDelete; private SqlCommand cmdInsert; Private sqlcommand cmdselect; private sqlcommand cmdupdate; private sqlcommand infrunalcmdselect;} where there is no Fill method, where is it from? It is necessary to inherit from its parent class DBDataAdapter to see all members of DBDataAdapter Public Abstract Class DBDataAdapter: DataAdapter, Icloneable {// Events Public Event FillerRoreventhandler Fillerror;
// Methods static DbDataAdapter (); protected DbDataAdapter (); protected DbDataAdapter (DbDataAdapter adapter); private static DataTable [] AddDataTableToArray (DataTable [] tables, DataTable newTable); private IDbCommand CloneCommand (IDbCommand command); protected abstract RowUpdatedEventArgs CreateRowUpdatedEvent (DataRow dataRow, IDbCommand command, statementType statementType, DataTableMapping tableMapping); protected abstract RowUpdatingEventArgs CreateRowUpdatingEvent (DataRow dataRow, IDbCommand command, statementType statementType, DataTableMapping tableMapping); protected override void Dispose (bool disposing); public override int Fill (DataSet dataSet); public int Fill (DataTable dataTable); public int Fill (DataSet dataSet, string srcTable); protected virtual int Fill (DataTable dataTable, IDataReader dataReader); protected virtual int Fill (DataTable dataTable, IDbCommand command, CommandBehavior behavior); public int Fill (DataSet dataSet, int startRecord, int maxRecords, string srcTable); protected virtual int Fill (DataSet dataSet, string srcTable, IDataReader dataReader, int startRecord, int maxRecords); protected virtual int Fill (DataSet dataSet, int startRecord, int maxRecords, string srcTable, IDbCommand command, CommandBehavior behavior); private void FillErrorHandler (Exception e, DataTable dataTable, object [] dataValues); private int FillFromCommand (object data, int startRecord, int maxRecords, string srcTable, IDbCommand command, CommandBehavior behavior);
internal int FillFromReader (object data, string srcTable, IDataReader dataReader, int startRecord, int maxRecords, DataColumn parentChapterColumn, object parentChapterValue); private int FillLoadDataRow (SchemaMapping mapping); private int FillLoadDataRowChunk (SchemaMapping mapping, int startRecord, int maxRecords); private bool FillNextResult (IDataReader dataReader); public override DataTable [] FillSchema (DataSet dataSet, schemaType schemaType); public DataTable FillSchema (DataTable dataTable, schemaType schemaType); public DataTable [] FillSchema (DataSet dataSet, schemaType schemaType, string srcTable); protected virtual DataTable FillSchema (DataTable dataTable, schemaType schemaType, IDbCommand command, CommandBehavior behavior); protected virtual DataTable [] FillSchema (DataSet dataSet, schemaType schemaType, IDbCommand command, string srcTable, CommandBehavior behavior); private DataTable [] FillSchemaFromCommand (object data, schemaType sch emaType, IDbCommand command, string srcTable, CommandBehavior behavior); private SchemaMapping FillSchemaMapping (object data, string srcTable, IDataReader dataReader, int schemaCount, DataColumn parentChapterColumn, object parentChapterValue); private SchemaMapping FillSchemaMappingTry (object data, string srcTable, IDataReader dataReader, int schemaCount , DataColumn parentChapterColumn, object parentChapterValue); private static IDbConnection GetConnection (IDbCommand command, string method); public override IDataParameter [] GetFillParameters (); private static DataRowVersion GetParameterSourceVersion (StatementType typeIndex, IDataParameter parameter);
internal static string GetSourceTableName (string srcTable, int index); protected virtual void OnFillError (FillErrorEventArgs value); protected abstract void OnRowUpdated (RowUpdatedEventArgs value); protected abstract void OnRowUpdating (RowUpdatingEventArgs value); private void ParameterInput (IDataParameterCollection parameters, StatementType typeIndex, DataRow row, DataTableMapping mappings); private void ParameterOutput (IDataParameterCollection parameters, StatementType typeIndex, DataRow row, DataTableMapping mappings); private static void QuietClose (IDbConnection connection, ConnectionState originalState); private static void QuietOpen (IDbConnection connection, out ConnectionState originalState); object ICloneable .Clone (); public int Update (DataRow [] dataRows); public override int Update (DataSet dataSet); public int Update (DataTable dataTable); protected virtual int Update (DataRow [] dataRows, DataTableMapping tableMapping); public int Update (DataSet dataSet, string srcTable); private void UpdateRow (RowUpdatedEventArgs rowUpdatedEvent, string commandType); // Properties private IDbCommand DeleteCommand {get;} private IDbCommand InsertCommand {get;} private IDbCommand SelectCommand {get;} private IDbCommand UpdateCommand { Get;
// Fields public const string DefaultSourceTableName = "Table"; private static readonly object EventFillError; private bool hasFillErrorHandler;} where there really Fill method, and also several times overload check public override int Fill (DataTable dataTable) method public override int Fill (DataSet Dataset) {Return this.fill (DataSet, 0, 0, "Table", this.selectcommand, commandbehavior.default;} It can be seen from Override to override the method in the base class, and it the base class is then a look DataAdapter Fill method DataAdapter class public abstract class DataAdapter: Component, IDataAdapter {// methods protected DataAdapter (); protected DataAdapter (DataAdapter adapter); protected virtual DataAdapter CloneInternals (); protected virtual DataTableMappingCollection CreateTableMappings (); protected override void Dispose (bool disposing); public abstract int Fill (DataSet dataSet); // here public abstract DataTable [] FillSchema (DataSet dataSet, schemaType schemaType); public abstract IDataParameter [] GetFillParameters (); INTERNAL DATATABLEMAP ping GetTableMappingBySchemaAction (string sourceTableName, string dataSetTableName, MissingMappingAction mappingAction); internal int IndexOfDataSetTable (string dataSetTable); protected virtual bool ShouldSerializeTableMappings (); ITableMappingCollection IDataAdapter.get_TableMappings (); public abstract int Update (DataSet dataSet); // Properties public bool AcceptChangesDuringFill {get; set;} public bool ContinueUpdateOnError {get; set;} public MissingMappingAction MissingMappingAction {get; set;} public MissingSchemaAction MissingSchemaAction {get; set;} public DataTableMappingCollection TableMappings {get;}
// Fields private bool acceptChangesDuringFill; private bool continueUpdateOnError; private MissingMappingAction missingMappingAction; private MissingSchemaAction missingSchemaAction; private DataTableMappingCollection tableMappings;} In other DataAdapter See Fill method public int Fill (DataTable dataTable) {if (dataTable == null) {throw ADP .FillRequires ( "dataTable");} IDbCommand command1 = this.SelectCommand; if (command1 == null) {throw ADP.MissingSelectCommand ( "Fill");} string text1 = dataTable.TableName; int num1 = base.IndexOfDataSetTable (text1 );! if (= num1 -1) {text1 = base.TableMappings [num1] .SourceTable;} return this.Fill (dataTable, command1, CommandBehavior.SingleResult);} public int Fill (DataSet dataSet, string srcTable) {return This.Fill (Dataset, 0, 0, Srctable, this.selectcommand, commandbehavior.default);} protected virtual int fix (DataTable DataTable, IDA TATADER DATAREADER) {if (DataTable == Null) {Throw ad.FillRequires ("DATATABLE");} if (DataReader == Null) {throw adp.FillRequires ("DataReader");} if (! DataReader.isclosed &&) dataReader.FieldCount> 0)) {return this.FillFromReader (dataTable, null, dataReader, 0, 0, null, null);} return 0;} protected virtual int Fill (DataTable dataTable, IDbCommand command, CommandBehavior behavior) {if ( DataTable == null) {throw adp.FillRequires ("DATATABLE");} f (command ==
null) {throw ADP.MissingSelectCommand ( "Fill");} return this.FillFromCommand (dataTable, 0, 0, null, command, behavior);} public int Fill (DataSet dataSet, int startRecord, int maxRecords, string srcTable) { return this.Fill (dataSet, startRecord, maxRecords, srcTable, this.SelectCommand, CommandBehavior.Default);} protected virtual int Fill (DataSet dataSet, string srcTable, IDataReader dataReader, int startRecord, int maxRecords) {if (dataSet == null ) {throw ADP.FillRequires ( "dataSet");} if (ADP.IsEmpty (srcTable)) {throw ADP.FillRequiresSourceTableName ( "srcTable");} if (dataReader == null) {throw ADP.FillRequires ( "dataReader" );} if (startRecord <0) {throw ADP.InvalidStartRecord ( "startRecord", startRecord);} if (maxRecords <0) {throw ADP.InvalidMaxRecords ( "maxRecords", maxRecords);} if (dataReader.IsClosed) {return 0;} return this.FillFromReader (dataSet, srcTable, dataReader, startRecord, maxRecords, null, null);} protected virtual int Fill (DataSet dataSet, int startRecord, int maxRecords, string srcTable, IDbCommand command, CommandBehavior behavior) {if (DataSet == null) {throw adp.FillRequires ("Dataset");} if (command == null) {throw adp.missingselectCommand ("fill");} if (StartRecord <0) {throw adp.invalidStartRecord (" StartRecord ", StartRecord);} IF (maxRecords <0) {throw adp.invalidmaxrecords ("
maxRecords ", maxRecords);} if (ADP.IsEmpty (srcTable)) {throw ADP.FillRequiresSourceTableName (" srcTable ");} return this.FillFromCommand (dataSet, startRecord, maxRecords, srcTable, command, behavior);} In fact, we can See the FillFromCommand or FillFromReader method in the Fill method. These two methods are discussed in the next article.