Поделиться через


DataSet.Load Метод

Определение

Заполняет DataSet значения из источника данных с помощью предоставленного IDataReader.

Перегрузки

Имя Описание
Load(IDataReader, LoadOption, DataTable[])

Заполняет DataSet значения из источника данных с помощью предоставленного IDataReaderмассива DataTable экземпляров для предоставления сведений о схеме и пространстве имен.

Load(IDataReader, LoadOption, String[])

Заполняет DataSet значения из источника данных с помощью предоставленного IDataReaderмассива строк для указания имен таблиц в пределах таблицы DataSet.

Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[])

Заполняет DataSet значения из источника данных с помощью предоставленного IDataReaderмассива DataTable экземпляров для предоставления сведений о схеме и пространстве имен.

Комментарии

Этот Load метод предоставляет метод заполнения одного DataTable данными, полученных из экземпляра IDataReader . Этот метод предоставляет одинаковые функциональные возможности, но позволяет загружать несколько результирующих наборов из IDataReader нескольких таблиц в пределах.DataSet

DataSet Если строки уже содержатся, входящие данные из источника данных объединяются с существующими строками.

Этот Load метод можно использовать в нескольких распространенных сценариях, в центре всего вокруг получения данных из указанного источника данных и добавления его в текущий контейнер данных (в данном случае — ).DataSet В этих сценариях описано стандартное использование для a DataSet, описывающее его поведение обновления и слияния.

Синхронизация DataSet или обновление с одним основным источником данных. Отслеживает DataSet изменения, разрешая синхронизацию с основным источником данных. Кроме того, можно DataSet принимать добавочные данные из одного или нескольких вторичных источников данных. Это DataSet не отвечает за отслеживание изменений, чтобы разрешить синхронизацию с вторичным источником данных.

Учитывая эти два гипотетических источника данных, пользователь, скорее всего, потребует одного из следующих действий:

  • Инициализация DataSet из первичного источника данных. В этом сценарии пользователь хочет инициализировать пустое DataSet значение со значениями из первичного источника данных. Изменяется одно или несколько содержимого DataTable. Позже пользователь намерен распространить изменения обратно в основной источник данных.

  • Сохранение изменений и повторная синхронизация из первичного источника данных. В этом сценарии пользователь хочет выполнить DataSet заполнение предыдущего сценария и выполнить добавочную синхронизацию с основным источником данных, сохраняя изменения, внесенные в этот DataSetсценарий.

  • Добавочный веб-канал данных из вторичных источников данных. В этом сценарии пользователь хочет объединить изменения из одного или нескольких вторичных источников данных и распространить эти изменения обратно в первичный источник данных.

Метод Load делает все эти сценарии возможными. Этот метод позволяет указать параметр параметра загрузки, указывающий, как строки уже в DataTable сочетании с загруженными строками. В следующей таблице описаны три варианта загрузки, предоставляемые LoadOption перечислением. В каждом случае описание указывает на поведение, когда первичный ключ строки в входящих данных соответствует первичному ключу существующей строки.

Параметр загрузки Описание
PreserveChanges (по умолчанию) Обновляет исходную версию строки со значением входящей строки.
OverwriteChanges Обновляет текущие и исходные версии строки со значением входящей строки.
Upsert Обновляет текущую версию строки со значением входящей строки.

Как правило, параметры OverwriteChanges предназначены для сценариев, PreserveChanges в которых пользователь должен синхронизировать DataSet изменения с основным источником данных. Этот Upsert параметр упрощает агрегирование изменений из одного или нескольких вторичных источников данных.

Load(IDataReader, LoadOption, DataTable[])

Исходный код:
DataSet.cs
Исходный код:
DataSet.cs
Исходный код:
DataSet.cs
Исходный код:
DataSet.cs
Исходный код:
DataSet.cs

Заполняет DataSet значения из источника данных с помощью предоставленного IDataReaderмассива DataTable экземпляров для предоставления сведений о схеме и пространстве имен.

public:
 void Load(System::Data::IDataReader ^ reader, System::Data::LoadOption loadOption, ... cli::array <System::Data::DataTable ^> ^ tables);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Using LoadOption may cause members from types used in the expression column to be trimmed if not referenced directly.")]
public void Load(System.Data.IDataReader reader, System.Data.LoadOption loadOption, params System.Data.DataTable[] tables);
public void Load(System.Data.IDataReader reader, System.Data.LoadOption loadOption, params System.Data.DataTable[] tables);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Using LoadOption may cause members from types used in the expression column to be trimmed if not referenced directly.")>]
member this.Load : System.Data.IDataReader * System.Data.LoadOption * System.Data.DataTable[] -> unit
member this.Load : System.Data.IDataReader * System.Data.LoadOption * System.Data.DataTable[] -> unit
Public 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в объект, а затем заполняется DataSet методом Load , извлекая данные из 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 метод предоставляет метод заполнения одного DataTable данными, полученных из экземпляра IDataReader . Этот метод предоставляет одинаковые функциональные возможности, но позволяет загружать несколько результирующих наборов из IDataReader нескольких таблиц в пределах.DataSet

Замечание

Операция загрузки завершится ошибкой, InvalidOperationException если любой из столбцов исходных данных в входящих reader вычисляются столбцы.

Параметр loadOption позволяет указать способ взаимодействия импортированных данных с существующими данными и может быть любым из значений перечисления LoadOption . Дополнительные сведения об использовании этого параметра см. в документации по методу DataTableLoad .

Параметр tables позволяет указать массив DataTable экземпляров, указывающий порядок таблиц, соответствующих каждому результирующем набору, загруженного из средства чтения. Метод Load заполняет каждый предоставленный DataTable экземпляр данными из одного результирующий набор из средства чтения исходных данных. После каждого результирующий набор метод переходит к следующему результирующем набору Load в средстве чтения, пока не будет больше результирующих наборов.

Схема разрешения имен для этого метода аналогична схеме разрешения имен, за которой следует Fill метод DbDataAdapter класса.

См. также раздел

Применяется к

Load(IDataReader, LoadOption, String[])

Исходный код:
DataSet.cs
Исходный код:
DataSet.cs
Исходный код:
DataSet.cs
Исходный код:
DataSet.cs
Исходный код:
DataSet.cs

Заполняет DataSet значения из источника данных с помощью предоставленного IDataReaderмассива строк для указания имен таблиц в пределах таблицы DataSet.

public:
 void Load(System::Data::IDataReader ^ reader, System::Data::LoadOption loadOption, ... cli::array <System::String ^> ^ tables);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Using LoadOption may cause members from types used in the expression column to be trimmed if not referenced directly.")]
public void Load(System.Data.IDataReader reader, System.Data.LoadOption loadOption, params string[] tables);
public void Load(System.Data.IDataReader reader, System.Data.LoadOption loadOption, params string[] tables);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Using LoadOption may cause members from types used in the expression column to be trimmed if not referenced directly.")>]
member this.Load : System.Data.IDataReader * System.Data.LoadOption * string[] -> unit
member this.Load : System.Data.IDataReader * System.Data.LoadOption * string[] -> unit
Public Sub Load (reader As IDataReader, loadOption As LoadOption, ParamArray tables As String())

Параметры

reader
IDataReader

Объект, предоставляющий IDataReader один или несколько результирующих наборов.

loadOption
LoadOption

Значение перечисления LoadOption , указывающее, как строки, уже находящиеся в DataTable экземплярах, DataSet будут объединены с входящими строками, которые используют один и тот же первичный ключ.

tables
String[]

Массив строк, из которого Load метод получает сведения о имени таблицы.

Атрибуты

Примеры

В следующем примере консольного приложения сначала создаются таблицы и загружаются данные из средства чтения в DataSetметод.Load Затем пример добавляет таблицы в таблицу 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 метод предоставляет метод заполнения одного DataTable данными, полученных из экземпляра IDataReader . Этот метод предоставляет одинаковые функциональные возможности, но позволяет загружать несколько результирующих наборов из IDataReader нескольких таблиц в пределах.DataSet

Замечание

Операция загрузки завершится ошибкой, InvalidOperationException если любой из столбцов исходных данных в входящих reader вычисляются столбцы.

Параметр loadOption позволяет указать способ взаимодействия импортированных данных с существующими данными и может быть любым из значений перечисления LoadOption . Дополнительные сведения об использовании этого параметра см. в документации по методу Load .

Параметр tables позволяет указать массив имен таблиц, указывающий порядок таблиц, соответствующих каждому результирующем набору, загруженного из средства чтения. Метод Load пытается найти таблицу в DataSet соответствии с именем, найденным в массиве имен таблиц, в порядке. Если найдена соответствующая таблица, эта таблица загружается с содержимым текущего результирующий набор. Если таблица не найдена, таблица создается с помощью имени, предоставленного в массиве имен таблиц, и схема новой таблицы выводится из результирующий набор. После каждого результирующий набор метод переходит к следующему результирующем набору Load в средстве чтения, пока не будет больше результирующих наборов.

Пространство имен по умолчанию, связанное с DataSetновым созданным .DataTable Схема разрешения имен для этого метода аналогична схеме разрешения имен, за которой следует Fill метод DbDataAdapter класса.

См. также раздел

Применяется к

Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[])

Исходный код:
DataSet.cs
Исходный код:
DataSet.cs
Исходный код:
DataSet.cs
Исходный код:
DataSet.cs
Исходный код:
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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Using LoadOption may cause members from types used in the expression column to be trimmed if not referenced directly.")]
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);
public virtual void Load(System.Data.IDataReader reader, System.Data.LoadOption loadOption, System.Data.FillErrorEventHandler errorHandler, params System.Data.DataTable[] tables);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Using LoadOption may cause members from types used in the expression column to be trimmed if not referenced directly.")>]
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[] -> unit
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[] -> unit
Public 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 метод предоставляет метод заполнения одного DataTable данными, полученных из экземпляра IDataReader . Этот метод предоставляет одинаковые функциональные возможности, но позволяет загружать несколько результирующих наборов из IDataReader нескольких таблиц в пределах.DataSet

Замечание

Операция загрузки завершится ошибкой, InvalidOperationException если любой из столбцов исходных данных в входящих reader вычисляются столбцы.

Параметр loadOption позволяет указать способ взаимодействия импортированных данных с существующими данными и может быть любым из значений перечисления LoadOption . Дополнительные сведения об использовании этого параметра см. в документации по методу DataTableLoad .

Параметр errorHandler — это FillErrorEventHandler делегат, который ссылается на процедуру, которая вызывается при возникновении ошибки при загрузке данных. Параметр FillErrorEventArgs , переданный в процедуру, предоставляет свойства, позволяющие получить сведения об ошибке, текущей строке данных и заполнении DataTable . Использование этого механизма делегата, а не более простого блока try/catch, позволяет определить ошибку, обработать ситуацию и продолжить обработку, если вы хотите. Параметр FillErrorEventArgs предоставляет Continue свойство: задайте это свойство, чтобы true указать, что вы выполнили ошибку и хотите продолжить обработку; задайте для свойства значение, false указывающее, что вы хотите прекратить обработку. Имейте в виду, что задание свойства false вызывает код, который вызвал проблему, чтобы вызвать исключение.

Параметр tables позволяет указать массив DataTable экземпляров, указывающий порядок таблиц, соответствующих каждому результирующем набору, загруженного из средства чтения. Метод Load заполняет каждый предоставленный DataTable экземпляр данными из одного результирующий набор из средства чтения исходных данных. После каждого результирующий набор метод переходит к следующему результирующем набору Load в средстве чтения, пока не будет больше результирующих наборов.

Схема разрешения имен для этого метода аналогична схеме разрешения имен, за которой следует Fill метод DbDataAdapter класса.

См. также раздел

Применяется к