DataSet.Load 方法  
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
通过所提供的 IDataReader,用某个数据源的值填充 DataSet。
重载
| Load(IDataReader, LoadOption, DataTable[]) | 使用提供的 DataSet 以数据源的值填充 IDataReader,同时使用 DataTable 实例的数组提供架构和命名空间信息。 | 
| Load(IDataReader, LoadOption, String[]) | 使用所提供的 DataSet,并使用字符串数组为  | 
| Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[]) | 使用提供的 DataSet 以数据源的值填充 IDataReader,同时使用 DataTable 实例的数组提供架构和命名空间信息。 | 
注解
方法Load提供了一种使用从 IDataReader 实例检索的数据填充单个DataTable的技术。 此方法提供相同的功能,但允许您将多个结果集从 IDataReader 加载到 中的 DataSet多个表中。
如果 DataSet 已经包含行,则从数据源传入的数据与现有行合并。
方法 Load 可用于多种常见方案,其中心都是从指定数据源获取数据并将其添加到当前数据容器 (在本例 DataSet 中为) 。 这些方案描述 的标准用法 DataSet,描述其更新和合并行为。
与 DataSet 单个主数据源同步或更新。 跟踪 DataSet 更改,从而允许与主数据源同步。 此外, DataSet 可以接受来自一个或多个辅助数据源的增量数据。 
              DataSet不负责跟踪更改以允许与辅助数据源同步。
给定这两个假设数据源,用户可能需要以下行为之一:
- 从主数据源初始化 - DataSet。 在此方案中,用户希望使用主数据源中的值初始化空- DataSet。 修改一个或多个 DataTable 的内容。 稍后,用户打算将更改传播回主数据源。
- 保留更改并从主数据源重新同步。 在此方案中,用户希望获取 - DataSet上一方案中填充的 ,并执行与主数据源的增量同步,从而保留 中- DataSet所做的修改。
- 来自辅助数据源的增量数据馈送。 在此方案中,用户希望合并来自一个或多个辅助数据源的更改,并将这些更改传播回主数据源。 
方法 Load 使所有这些方案成为可能。 此方法允许指定 load 选项参数,指示 中 DataTable 已有的行如何与正在加载的行合并。 下表描述了 枚举提供的三个 LoadOption 加载选项。 在每种情况下,说明都指示传入数据中行的主键与现有行的主键匹配时的行为。
| 加载选项 | 描述 | 
|---|---|
| PreserveChanges(默认值) | 使用传入行的值汇报行的原始版本。 | 
| OverwriteChanges | 使用传入行的值汇报行的当前版本和原始版本。 | 
| Upsert | 使用传入行的值汇报当前版本的行。 | 
通常, PreserveChanges 和 OverwriteChanges 选项适用于用户需要将 及其更改与主数据源同步 DataSet 的方案。 选项 Upsert 有助于聚合来自一个或多个辅助数据源的更改。
Load(IDataReader, LoadOption, DataTable[])
- Source:
- DataSet.cs
- Source:
- DataSet.cs
- Source:
- DataSet.cs
使用提供的 DataSet 以数据源的值填充 IDataReader,同时使用 DataTable 实例的数组提供架构和命名空间信息。
public:
 void Load(System::Data::IDataReader ^ reader, System::Data::LoadOption loadOption, ... cli::array <System::Data::DataTable ^> ^ tables);public void Load (System.Data.IDataReader reader, System.Data.LoadOption loadOption, params System.Data.DataTable[] tables);member this.Load : System.Data.IDataReader * System.Data.LoadOption * System.Data.DataTable[] -> unitPublic Sub Load (reader As IDataReader, loadOption As LoadOption, ParamArray tables As DataTable())参数
- reader
- IDataReader
提供一个或多个结果集的 IDataReader。
- loadOption
- LoadOption
一个来自 LoadOption 枚举的值,该值指示 DataTable 中的 DataSet 实例内已有的行如何与共享同一主键的传入行进行组合。
- tables
- DataTable[]
DataTable 实例的数组,Load(IDataReader, LoadOption, DataTable[]) 方法从该数组中检索名称和命名空间信息。 其中每个表都必须是此 DataTableCollection 所包含的 DataSet 的成员。
示例
以下示例创建一个新的 DataSet,将两 DataTable 个 实例添加到 DataSet,然后使用 方法填充 DataSetLoad ,从包含两个 DataTableReader 结果集的 中检索数据。 最后,该示例在控制台窗口中显示表的内容。
static void Main()
{
    DataSet dataSet = new DataSet();
    DataTable customerTable = new DataTable();
    DataTable productTable = new DataTable();
    // This information is cosmetic, only.
    customerTable.TableName = "Customers";
    productTable.TableName = "Products";
    // Add the tables to the DataSet:
    dataSet.Tables.Add(customerTable);
    dataSet.Tables.Add(productTable);
    // Load the data into the existing DataSet.
    DataTableReader reader = GetReader();
    dataSet.Load(reader, LoadOption.OverwriteChanges,
        customerTable, productTable);
    // Print out the contents of each table:
    foreach (DataTable table in dataSet.Tables)
    {
        PrintColumns(table);
    }
    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}
private static DataTable GetCustomers()
{
    // Create sample Customers table.
    DataTable table = new DataTable();
    table.TableName = "Customers";
    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));
    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };
    table.Rows.Add(new object[] { 0, "Mary" });
    table.Rows.Add(new object[] { 1, "Andy" });
    table.Rows.Add(new object[] { 2, "Peter" });
    table.AcceptChanges();
    return table;
}
private static DataTable GetProducts()
{
    // Create sample Products table.
    DataTable table = new DataTable();
    table.TableName = "Products";
    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID",
        typeof(int));
    table.Columns.Add("Name", typeof(string));
    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };
    table.Rows.Add(new object[] { 0, "Wireless Network Card" });
    table.Rows.Add(new object[] { 1, "Hard Drive" });
    table.Rows.Add(new object[] { 2, "Monitor" });
    table.Rows.Add(new object[] { 3, "CPU" });
    table.AcceptChanges();
    return table;
}
private static void PrintColumns(DataTable table)
{
    Console.WriteLine();
    Console.WriteLine(table.TableName);
    Console.WriteLine("=========================");
    // Loop through all the rows in the table:
    foreach (DataRow row in table.Rows)
    {
        for (int i = 0; i < table.Columns.Count; i++)
        {
            Console.Write(row[i] + " ");
        }
        Console.WriteLine();
    }
}
private static DataTableReader GetReader()
{
    // Return a DataTableReader containing multiple
    // result sets, just for the sake of this demo.
    DataSet dataSet = new DataSet();
    dataSet.Tables.Add(GetCustomers());
    dataSet.Tables.Add(GetProducts());
    return dataSet.CreateDataReader();
}
Sub Main()
    Dim dataSet As New DataSet
    Dim customerTable As New DataTable
    Dim productTable As New DataTable
    ' This information is cosmetic, only.
    customerTable.TableName = "Customers"
    productTable.TableName = "Products"
    ' Add the tables to the DataSet:
    dataSet.Tables.Add(customerTable)
    dataSet.Tables.Add(productTable)
    ' Load the data into the existing DataSet. 
    Dim reader As DataTableReader = GetReader()
    dataSet.Load(reader, LoadOption.OverwriteChanges, _
        customerTable, productTable)
    ' Print out the contents of each table:
    For Each table As DataTable In dataSet.Tables
        PrintColumns(table)
    Next
    Console.WriteLine("Press any key to continue.")
    Console.ReadKey()
End Sub
Private Function GetCustomers() As DataTable
    ' Create sample Customers table.
    Dim table As New DataTable
    table.TableName = "Customers"
    ' Create two columns, ID and Name.
    Dim idColumn As DataColumn = table.Columns.Add("ID", _
        GetType(Integer))
    table.Columns.Add("Name", GetType(String))
    ' Set the ID column as the primary key column.
    table.PrimaryKey = New DataColumn() {idColumn}
    table.Rows.Add(New Object() {0, "Mary"})
    table.Rows.Add(New Object() {1, "Andy"})
    table.Rows.Add(New Object() {2, "Peter"})
    table.AcceptChanges()
    Return table
End Function
Private Function GetProducts() As DataTable
    ' Create sample Products table, in order
    ' to demonstrate the behavior of the DataTableReader.
    Dim table As New DataTable
    table.TableName = "Products"
    ' Create two columns, ID and Name.
    Dim idColumn As DataColumn = table.Columns.Add("ID", _
        GetType(Integer))
    table.Columns.Add("Name", GetType(String))
    ' Set the ID column as the primary key column.
    table.PrimaryKey = New DataColumn() {idColumn}
    table.Rows.Add(New Object() {0, "Wireless Network Card"})
    table.Rows.Add(New Object() {1, "Hard Drive"})
    table.Rows.Add(New Object() {2, "Monitor"})
    table.Rows.Add(New Object() {3, "CPU"})
    Return table
End Function
Private Function GetReader() As DataTableReader
    ' Return a DataTableReader containing multiple
    ' result sets, just for the sake of this demo.
    Dim dataSet As New DataSet
    dataSet.Tables.Add(GetCustomers())
    dataSet.Tables.Add(GetProducts())
    Return dataSet.CreateDataReader()
End Function
Private Sub PrintColumns( _
   ByVal table As DataTable)
    Console.WriteLine()
    Console.WriteLine(table.TableName)
    Console.WriteLine("=========================")
    ' Loop through all the rows in the table.
    For Each row As DataRow In table.Rows
        For Each col As DataColumn In table.Columns
            Console.Write(row(col).ToString() & " ")
        Next
        Console.WriteLine()
    Next
End Sub
注解
方法Load提供了一种使用从 IDataReader 实例检索的数据填充单个DataTable的技术。 此方法提供相同的功能,但允许您将多个结果集从 IDataReader 加载到 中的 DataSet多个表中。
注意
如果传入reader中的任何源数据列是计算列,则加载操作将失败,并显示 InvalidOperationException 。
参数 loadOption 允许指定希望导入的数据如何与现有数据交互,并且可以是 枚举中的任何值 LoadOption 。 有关使用此参数的详细信息, DataTableLoad 请参阅 方法的文档。
参数 tables 允许您指定实例数组 DataTable ,指示与从读取器加载的每个结果集对应的表的顺序。 方法 Load 使用源数据读取器中单个结果集中的数据填充提供 DataTable 的每个实例。 在每个结果集之后, Load 该方法将转到读取器中的下一个结果集,直到没有更多结果集。
此方法的名称解析方案与后跟 Fill 类的 DbDataAdapter 方法相同。
另请参阅
适用于
Load(IDataReader, LoadOption, String[])
- Source:
- DataSet.cs
- Source:
- DataSet.cs
- Source:
- DataSet.cs
使用所提供的 DataSet,并使用字符串数组为 DataSet 中的表提供名称,从而用来自数据源的值填充 IDataReader。
public:
 void Load(System::Data::IDataReader ^ reader, System::Data::LoadOption loadOption, ... cli::array <System::String ^> ^ tables);public void Load (System.Data.IDataReader reader, System.Data.LoadOption loadOption, params string[] tables);member this.Load : System.Data.IDataReader * System.Data.LoadOption * string[] -> unitPublic Sub Load (reader As IDataReader, loadOption As LoadOption, ParamArray tables As String())参数
- reader
- IDataReader
提供一个或多个结果集的 IDataReader。
- loadOption
- LoadOption
一个来自 LoadOption 枚举的值,该值指示 DataTable 中的 DataSet 实例内已有的行如何与共享同一主键的传入行进行组合。
- tables
- String[]
字符串数组,Load 方法将从该数组中检索表名称信息。
示例
下面的控制台应用程序示例首先使用 Load 方法创建表并将数据从读取器加载到 DataSet中。 然后,该示例将表添加到 , DataSet 并尝试使用 中的数据 DataTableReader填充表。 在此示例中,由于传递给 Load 方法的参数指示不存在的表名称, Load 因此该方法将创建一个新表,以匹配作为参数传递的名称。 加载数据后,该示例会在控制台窗口中显示其所有表的内容。
static void Main()
{
    DataSet dataSet = new DataSet();
    DataTableReader reader = GetReader();
    // The tables listed as parameters for the Load method
    // should be in the same order as the tables within the IDataReader.
    dataSet.Load(reader, LoadOption.Upsert, "Customers", "Products");
    foreach (DataTable table in dataSet.Tables)
    {
        PrintColumns(table);
    }
    // Now try the example with the DataSet
    // already filled with data:
    dataSet = new DataSet();
    dataSet.Tables.Add(GetCustomers());
    dataSet.Tables.Add(GetProducts());
    // Retrieve a data reader containing changed data:
    reader = GetReader();
    // Load the data into the existing DataSet. Retrieve the order of the
    // the data in the reader from the
    // list of table names in the parameters. If you specify
    // a new table name here, the Load method will create
    // a corresponding new table.
    dataSet.Load(reader, LoadOption.Upsert,
        "NewCustomers", "Products");
    foreach (DataTable table in dataSet.Tables)
    {
        PrintColumns(table);
    }
    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}
private static DataTable GetCustomers()
{
    // Create sample Customers table.
    DataTable table = new DataTable();
    table.TableName = "Customers";
    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));
    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };
    table.Rows.Add(new object[] { 0, "Mary" });
    table.Rows.Add(new object[] { 1, "Andy" });
    table.Rows.Add(new object[] { 2, "Peter" });
    table.AcceptChanges();
    return table;
}
private static DataTable GetProducts()
{
    // Create sample Products table.
    DataTable table = new DataTable();
    table.TableName = "Products";
    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));
    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };
    table.Rows.Add(new object[] { 0, "Wireless Network Card" });
    table.Rows.Add(new object[] { 1, "Hard Drive" });
    table.Rows.Add(new object[] { 2, "Monitor" });
    table.Rows.Add(new object[] { 3, "CPU" });
    table.AcceptChanges();
    return table;
}
private static void PrintColumns(DataTable table)
{
    Console.WriteLine();
    Console.WriteLine(table.TableName);
    Console.WriteLine("=========================");
    // Loop through all the rows in the table:
    foreach (DataRow row in table.Rows)
    {
        for (int i = 0; i < table.Columns.Count; i++)
        {
            Console.Write(row[i] + " ");
        }
        Console.WriteLine();
    }
}
private static DataTableReader GetReader()
{
    // Return a DataTableReader containing multiple
    // result sets, just for the sake of this demo.
    DataSet dataSet = new DataSet();
    dataSet.Tables.Add(GetCustomers());
    dataSet.Tables.Add(GetProducts());
    return dataSet.CreateDataReader();
}
Sub Main()
  Dim dataSet As New DataSet
  Dim table As DataTable
  Dim reader As DataTableReader = GetReader()
  ' The tables listed as parameters for the Load method 
  ' should be in the same order as the tables within the IDataReader.
  dataSet.Load(reader, LoadOption.Upsert, "Customers", "Products")
  For Each table In dataSet.Tables
    PrintColumns(table)
  Next
  ' Now try the example with the DataSet
  ' already filled with data:
  dataSet = New DataSet
  dataSet.Tables.Add(GetCustomers())
  dataSet.Tables.Add(GetProducts())
  ' Retrieve a data reader containing changed data:
  reader = GetReader()
  ' Load the data into the existing DataSet. Retrieve the order of the
  ' the data in the reader from the
  ' list of table names in the parameters. If you specify
  ' a new table name here, the Load method will create
  ' a corresponding new table.
  dataSet.Load(reader, LoadOption.Upsert, "NewCustomers", "Products")
  For Each table In dataSet.Tables
    PrintColumns(table)
  Next
  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub
Private Function GetCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable
  table.TableName = "Customers"
  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))
  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}
  table.Rows.Add(New Object() {0, "Mary"})
  table.Rows.Add(New Object() {1, "Andy"})
  table.Rows.Add(New Object() {2, "Peter"})
  table.AcceptChanges()
  Return table
End Function
Private Function GetProducts() As DataTable
  ' Create sample Products table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable
  table.TableName = "Products"
  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))
  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}
  table.Rows.Add(New Object() {0, "Wireless Network Card"})
  table.Rows.Add(New Object() {1, "Hard Drive"})
  table.Rows.Add(New Object() {2, "Monitor"})
  table.Rows.Add(New Object() {3, "CPU"})
  Return table
End Function
Private Function GetReader() As DataTableReader
  ' Return a DataTableReader containing multiple
  ' result sets, just for the sake of this demo.
  Dim dataSet As New DataSet
  dataSet.Tables.Add(GetCustomers())
  dataSet.Tables.Add(GetProducts())
  Return dataSet.CreateDataReader()
End Function
Private Sub PrintColumns( _
   ByVal table As DataTable)
  Console.WriteLine()
  Console.WriteLine(table.TableName)
  Console.WriteLine("=========================")
  ' Loop through all the rows in the table.
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(row(col).ToString() & " ")
    Next
    Console.WriteLine()
  Next
End Sub
注解
方法Load提供了一种使用从 IDataReader 实例检索的数据填充单个DataTable的技术。 此方法提供相同的功能,但允许您将多个结果集从 IDataReader 加载到 中的 DataSet多个表中。
注意
如果传入reader中的任何源数据列是计算列,则加载操作将失败,并显示 InvalidOperationException 。
参数 loadOption 允许指定希望导入的数据如何与现有数据交互,并且可以是 枚举中的任何值 LoadOption 。 有关使用此参数的详细信息, Load 请参阅 方法的文档。
参数 tables 允许指定表名数组,指示从读取器加载的每个结果集所对应的表的顺序。 方法 Load 尝试按顺序在与表名数组中找到的名称匹配的 内 DataSet 查找表。 如果找到匹配的表,则会使用当前结果集的内容加载该表。 如果未找到匹配的表,则使用表名称数组中提供的名称创建一个表,并从结果集推断出新表的架构。 在每个结果集之后, Load 该方法将转到读取器中的下一个结果集,直到没有更多结果集。
与 DataSet关联的默认命名空间(如果有)与每个新创建的 DataTable相关联。 此方法的名称解析方案与后跟 Fill 类的 DbDataAdapter 方法相同。
另请参阅
适用于
Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[])
- Source:
- DataSet.cs
- Source:
- DataSet.cs
- Source:
- DataSet.cs
使用提供的 DataSet 以数据源的值填充 IDataReader,同时使用 DataTable 实例的数组提供架构和命名空间信息。
public:
 virtual void Load(System::Data::IDataReader ^ reader, System::Data::LoadOption loadOption, System::Data::FillErrorEventHandler ^ errorHandler, ... cli::array <System::Data::DataTable ^> ^ tables);public virtual void Load (System.Data.IDataReader reader, System.Data.LoadOption loadOption, System.Data.FillErrorEventHandler? errorHandler, params System.Data.DataTable[] tables);public virtual void Load (System.Data.IDataReader reader, System.Data.LoadOption loadOption, System.Data.FillErrorEventHandler errorHandler, params System.Data.DataTable[] tables);abstract member Load : System.Data.IDataReader * System.Data.LoadOption * System.Data.FillErrorEventHandler * System.Data.DataTable[] -> unit
override this.Load : System.Data.IDataReader * System.Data.LoadOption * System.Data.FillErrorEventHandler * System.Data.DataTable[] -> unitPublic Overridable Sub Load (reader As IDataReader, loadOption As LoadOption, errorHandler As FillErrorEventHandler, ParamArray tables As DataTable())参数
- reader
- IDataReader
提供一个或多个结果集的 IDataReader。
- loadOption
- LoadOption
一个来自 LoadOption 枚举的值,该值指示 DataTable 中的 DataSet 实例内已有的行如何与共享同一主键的传入行进行组合。
- errorHandler
- FillErrorEventHandler
加载数据时出现错误的情况下要调用的 FillErrorEventHandler 委托。
- tables
- DataTable[]
DataTable 实例的数组,Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[]) 方法从该数组中检索名称和命名空间信息。
示例
以下示例将表添加到 , DataSet然后尝试使用 Load 方法从 DataTableReader 包含不兼容架构的 加载数据。 此示例使用 FillErrorEventHandler 委托来调查和处理错误,而不是捕获错误。 输出显示在控制台窗口中。
static void Main()
{
    // Attempt to load data from a data reader in which
    // the schema is incompatible with the current schema.
    // If you use exception handling, you won't get the chance
    // to examine each row, and each individual table,
    // as the Load method progresses.
    // By taking advantage of the FillErrorEventHandler delegate,
    // you can interact with the Load process as an error occurs,
    // attempting to fix the problem, or simply continuing or quitting
    // the Load process.:
    DataSet dataSet = new DataSet();
    DataTable table = GetIntegerTable();
    dataSet.Tables.Add(table);
    DataTableReader reader = new DataTableReader(GetStringTable());
    dataSet.Load(reader, LoadOption.OverwriteChanges,
        FillErrorHandler, table);
    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}
private static DataTable GetIntegerTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();
    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };
    table.Rows.Add(new object[] { 4 });
    table.Rows.Add(new object[] { 5 });
    table.AcceptChanges();
    return table;
}
private static DataTable GetStringTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();
    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(string));
    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };
    table.Rows.Add(new object[] { "Mary" });
    table.Rows.Add(new object[] { "Andy" });
    table.Rows.Add(new object[] { "Peter" });
    table.AcceptChanges();
    return table;
}
static void FillErrorHandler(object sender, FillErrorEventArgs e)
{
    // You can use the e.Errors value to determine exactly what
    // went wrong.
    if (e.Errors.GetType() == typeof(System.FormatException))
    {
        Console.WriteLine("Error when attempting to update the value: {0}",
            e.Values[0]);
    }
    // Setting e.Continue to True tells the Load
    // method to continue trying. Setting it to False
    // indicates that an error has occurred, and the
    // Load method raises the exception that got
    // you here.
    e.Continue = true;
}
Sub Main()
  Dim dataSet As New DataSet
  Dim table As New DataTable()
  ' Attempt to load data from a data reader in which
  ' the schema is incompatible with the current schema.
  ' If you use exception handling, you won't get the chance
  ' to examine each row, and each individual table,
  ' as the Load method progresses.
  ' By taking advantage of the FillErrorEventHandler delegate,
  ' you can interact with the Load process as an error occurs,
  ' attempting to fix the problem, or simply continuing or quitting
  ' the Load process.:
  dataSet = New DataSet()
  table = GetIntegerTable()
  dataSet.Tables.Add(table)
  Dim reader As New DataTableReader(GetStringTable())
  dataSet.Load(reader, LoadOption.OverwriteChanges, _
      AddressOf FillErrorHandler, table)
  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub
Private Sub FillErrorHandler(ByVal sender As Object, _
  ByVal e As FillErrorEventArgs)
  ' You can use the e.Errors value to determine exactly what
  ' went wrong.
  If e.Errors.GetType Is GetType(System.FormatException) Then
    Console.WriteLine("Error when attempting to update the value: {0}", _
      e.Values(0))
  End If
  ' Setting e.Continue to True tells the Load
  ' method to continue trying. Setting it to False
  ' indicates that an error has occurred, and the 
  ' Load method raises the exception that got 
  ' you here.
  e.Continue = True
End Sub
Private Function GetIntegerTable() As DataTable
  ' Create sample table with a single Int32 column.
  Dim table As New DataTable
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(Integer))
  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}
  table.Rows.Add(New Object() {4})
  table.Rows.Add(New Object() {5})
  table.TableName = "IntegerTable"
  table.AcceptChanges()
  Return table
End Function
Private Function GetStringTable() As DataTable
  ' Create sample table with a single String column.
  Dim table As New DataTable
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(String))
  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}
  table.Rows.Add(New Object() {"Mary"})
  table.Rows.Add(New Object() {"Andy"})
  table.Rows.Add(New Object() {"Peter"})
  table.AcceptChanges()
  Return table
End Function
Private Sub PrintColumns( _
   ByVal table As DataTable)
  ' Loop through all the rows in the DataTableReader.
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(row(col).ToString() & " ")
    Next
    Console.WriteLine()
  Next
End Sub
注解
方法Load提供了一种使用从 IDataReader 实例检索的数据填充单个DataTable的技术。 此方法提供相同的功能,但允许您将多个结果集从 IDataReader 加载到 中的 DataSet多个表中。
注意
如果传入reader中的任何源数据列是计算列,则加载操作将失败,并显示 InvalidOperationException 。
参数 loadOption 允许指定希望导入的数据如何与现有数据交互,并且可以是 枚举中的任何值 LoadOption 。 有关使用此参数的详细信息, DataTableLoad 请参阅 方法的文档。
              errorHandler参数是一个FillErrorEventHandler委托,它引用加载数据时发生错误时调用的过程。 
              FillErrorEventArgs传递给过程的参数提供属性,使你能够检索有关发生的错误、当前数据行和DataTable正在填充的 的信息。 使用此委托机制(而不是更简单的 try/catch 块)可以确定错误、处理情况,并根据需要继续处理。 参数 FillErrorEventArgs 提供属性 Continue :将此属性设置为 true 以指示已处理错误并希望继续处理;将 属性设置为 false 以指示希望停止处理。 请注意,将 属性设置为 false 会导致触发问题的代码引发异常。
参数 tables 允许您指定实例数组 DataTable ,指示与从读取器加载的每个结果集对应的表的顺序。 方法 Load 使用源数据读取器中单个结果集中的数据填充提供 DataTable 的每个实例。 在每个结果集之后, Load 该方法将转到读取器中的下一个结果集,直到没有更多结果集。
此方法的名称解析方案与后跟 Fill 类的 DbDataAdapter 方法相同。