DataSet.Load Metoda

Definice

DataSet Vyplní hodnoty ze zdroje dat pomocí zadaného IDataReaderobjektu .

Přetížení

Load(IDataReader, LoadOption, DataTable[])

DataSet Vyplní hodnoty ze zdroje dat pomocí zadaného IDataReaderDataTable pole instancí k zadání informací o schématu a oboru názvů.

Load(IDataReader, LoadOption, String[])

DataSet Vyplní hodnoty ze zdroje dat pomocí zadaného IDataReaderpole řetězců k zadání názvů tabulek v rámci DataSet.

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

DataSet Vyplní hodnoty ze zdroje dat pomocí zadaného IDataReaderDataTable pole instancí k zadání informací o schématu a oboru názvů.

Poznámky

Tato Load metoda poskytuje techniku pro vyplnění jednoho DataTable dat načteným IDataReader z instance. Tato metoda poskytuje stejné funkce, ale umožňuje načíst více sad výsledků z více IDataReader tabulek v rámci DataSet.

DataSet Pokud už řádky obsahují, příchozí data ze zdroje dat se sloučí s existujícími řádky.

Tuto Load metodu je možné použít v několika běžných scénářích, které jsou zaměřené na získávání dat ze zadaného zdroje dat a jejich přidání do aktuálního kontejneru dat (v tomto případě a DataSet). Tyto scénáře popisují standardní použití , DataSetpopisující jeho aktualizace a slučovací chování.

Synchronizuje DataSet nebo aktualizuje jeden primární zdroj dat. Sleduje DataSet změny, což umožňuje synchronizaci s primárním zdrojem dat. Kromě toho DataSet může přijímat přírůstková data z jednoho nebo více sekundárních zdrojů dat. Není DataSet zodpovědný za sledování změn, aby bylo možné synchronizaci se sekundárním zdrojem dat.

Pokud budou k dispozici tyto dva hypotetické zdroje dat, bude uživatel pravděpodobně vyžadovat jedno z následujících chování:

  • Inicializace DataSet z primárního zdroje dat V tomto scénáři chce uživatel inicializovat prázdný DataSet s hodnotami z primárního zdroje dat. Obsah jedné nebo více datových tabulek se upraví. Později hodlá uživatel přenést tyto změny zpět do primárního zdroje dat.

  • Zachovat změny a znovu provést synchronizaci z primárního zdroje dat. V tomto scénáři chce uživatel vzít DataSet vyplněné v předchozím scénáři a provést přírůstkovou synchronizaci s primárním zdrojem dat a zachovat změny provedené v .DataSet

  • Načítat data postupně ze sekundárních zdrojů dat. V tomto scénáři chce uživatel sloučit změny z jednoho nebo více sekundárních zdrojů dat a přenést tyto změny zpět do primárního zdroje dat.

Tato Load metoda umožňuje všechny tyto scénáře. Tato metoda umožňuje zadat parametr možnosti načtení, který označuje, jak řádky již v DataTable kombinaci s načtenými řádky. Následující tabulka popisuje tři možnosti načtení, které LoadOption poskytuje výčet. Popis jednotlivých možností poskytuje informace o chování v případě, že se primární klíč řádku v příchozích datech shoduje s primárním klíčem existujícího řádku.

Možnost metody Load Description
PreserveChanges (výchozí) Aktualizuje původní verzi řádku s použitím hodnoty z příchozího řádku.
OverwriteChanges Aktualizuje aktuální a původní verze řádku s použitím hodnoty z příchozího řádku.
Upsert Aktualizuje aktuální verzi řádku s použitím hodnoty z příchozího řádku.

Obecně platí, že možnosti PreserveChanges a OverwriteChanges možnosti jsou určené pro scénáře, ve kterých musí uživatel synchronizovat DataSet změny a změny s primárním zdrojem dat. Tato Upsert možnost usnadňuje agregaci změn z jednoho nebo více sekundárních zdrojů dat.

Load(IDataReader, LoadOption, DataTable[])

DataSet Vyplní hodnoty ze zdroje dat pomocí zadaného IDataReaderDataTable pole instancí k zadání informací o schématu a oboru názvů.

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[] -> unit
Public Sub Load (reader As IDataReader, loadOption As LoadOption, ParamArray tables As DataTable())

Parametry

reader
IDataReader

Obsahuje IDataReader jednu nebo více sad výsledků.

loadOption
LoadOption

Hodnota z výčtu LoadOption , která označuje, jak řádky již v DataTable instancích v rámci DataSet budou sloučeny s příchozími řádky, které sdílejí stejný primární klíč.

tables
DataTable[]

Pole DataTable instancí, ze kterých Load(IDataReader, LoadOption, DataTable[]) metoda načte informace o názvu a oboru názvů. Každá z těchto tabulek musí být členem této DataSettabulky DataTableCollection .

Příklady

Následující příklad vytvoří novou DataSet, přidá do objektu DataSetdvě DataTable instance a pak vyplní DataSet pomocí Load metody načtení dat ze DataTableReader dvou sad výsledků. Nakonec příklad zobrazí obsah tabulek v okně konzoly.

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

Poznámky

Tato Load metoda poskytuje techniku pro vyplnění jednoho DataTable dat načteným IDataReader z instance. Tato metoda poskytuje stejné funkce, ale umožňuje načíst více sad výsledků z více IDataReader tabulek v rámci DataSet.

Poznámka

Operace načítání selže s případem InvalidOperationException , že některý ze zdrojových sloupců dat v příchozích reader sloupcích vypočítá.

Parametr loadOption umožňuje určit, jak mají importovaná data pracovat s existujícími daty, a může to být libovolná hodnota z výčtu LoadOption . Další informace o použití tohoto parametru najdete v dokumentaci k DataTableLoad metodě.

Parametr tables umožňuje zadat pole DataTable instancí, které označují pořadí tabulek odpovídajících každé sadě výsledků načtené ze čtečky. Metoda Load vyplní každou zadanou DataTable instanci dat dat z jedné sady výsledků ze zdrojové čtečky dat. Po každé sadě Load výsledků se metoda přesune na další sadu výsledků v rámci čtenáře, dokud nebudou žádné další sady výsledků.

Schéma překladu názvů pro tuto metodu je stejné jako Fill metoda následovaná metodou DbDataAdapter třídy.

Viz také

Platí pro

Load(IDataReader, LoadOption, String[])

DataSet Vyplní hodnoty ze zdroje dat pomocí zadaného IDataReaderpole řetězců k zadání názvů tabulek v rámci DataSet.

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[] -> unit
Public Sub Load (reader As IDataReader, loadOption As LoadOption, ParamArray tables As String())

Parametry

reader
IDataReader

Obsahuje IDataReader jednu nebo více sad výsledků.

loadOption
LoadOption

Hodnota z výčtu LoadOption , která označuje, jak řádky již v DataTable instancích v rámci DataSet budou sloučeny s příchozími řádky, které sdílejí stejný primární klíč.

tables
String[]

Pole řetězců, ze kterých Load metoda načte informace o názvu tabulky.

Příklady

Následující příklad konzolové aplikace nejprve vytvoří tabulky a načte data ze čtečky DataSetdo metody Load . Příklad pak přidá tabulky do DataSet tabulky a pokusí se vyplnit tabulky daty z DataTableReader. V tomto příkladu, protože parametry předané Load metodě označují název tabulky, který neexistuje, Load vytvoří metoda novou tabulku, která bude odpovídat názvu předaného jako parametr. Po načtení dat se v příkladu zobrazí obsah všech jejích tabulek v okně konzoly.

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

Poznámky

Tato Load metoda poskytuje techniku pro vyplnění jednoho DataTable dat načteným IDataReader z instance. Tato metoda poskytuje stejné funkce, ale umožňuje načíst více sad výsledků z více IDataReader tabulek v rámci DataSet.

Poznámka

Operace načítání selže s případem InvalidOperationException , že některý ze zdrojových sloupců dat v příchozích reader sloupcích vypočítá.

Parametr loadOption umožňuje určit, jak mají importovaná data pracovat s existujícími daty, a může to být libovolná hodnota z výčtu LoadOption . Další informace o použití tohoto parametru najdete v dokumentaci k Load metodě.

Parametr tables umožňuje zadat pole názvů tabulek, které označují pořadí tabulek odpovídajících každé sadě výsledků načtené ze čtečky. Metoda Load se pokusí najít tabulku v rámci DataSet odpovídajícího názvu nalezeného v poli názvů tabulek v pořadí. Pokud se najde odpovídající tabulka, tato tabulka se načte s obsahem aktuální sady výsledků. Pokud nenajdete žádnou odpovídající tabulku, vytvoří se tabulka pomocí názvu zadaného v matici názvů tabulek a schéma nové tabulky se odvodí ze sady výsledků. Po každé sadě Load výsledků se metoda přesune na další sadu výsledků v rámci čtenáře, dokud nebudou žádné další sady výsledků.

Výchozí obor názvů přidružený k DataSet, pokud existuje, je přidružen k jednotlivým nově vytvořeným DataTable. Schéma překladu názvů pro tuto metodu je stejné jako Fill metoda následovaná metodou DbDataAdapter třídy.

Viz také

Platí pro

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

DataSet Vyplní hodnoty ze zdroje dat pomocí zadaného IDataReaderDataTable pole instancí k zadání informací o schématu a oboru názvů.

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[] -> unit
Public Overridable Sub Load (reader As IDataReader, loadOption As LoadOption, errorHandler As FillErrorEventHandler, ParamArray tables As DataTable())

Parametry

reader
IDataReader

Obsahuje IDataReader jednu nebo více sad výsledků.

loadOption
LoadOption

Hodnota z výčtu LoadOption , která označuje, jak řádky již v DataTable instancích v rámci DataSet budou sloučeny s příchozími řádky, které sdílejí stejný primární klíč.

errorHandler
FillErrorEventHandler

Delegát, který FillErrorEventHandler volá, když dojde k chybě při načítání dat.

tables
DataTable[]

Pole DataTable instancí, ze kterých Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[]) metoda načte informace o názvu a oboru názvů.

Příklady

Následující příklad přidá tabulku do objektu DataSeta pak se pokusí použít metodu Load k načtení dat z DataTableReader nekompatibilního schématu. Místo zachycení chyby tento příklad používá FillErrorEventHandler delegáta k prošetření a zpracování chyby. Výstup se zobrazí v okně konzoly.

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

Poznámky

Tato Load metoda poskytuje techniku pro vyplnění jednoho DataTable dat načteným IDataReader z instance. Tato metoda poskytuje stejné funkce, ale umožňuje načíst více sad výsledků z více IDataReader tabulek v rámci DataSet.

Poznámka

Operace načítání selže s případem InvalidOperationException , že některý ze zdrojových sloupců dat v příchozích reader sloupcích vypočítá.

Parametr loadOption umožňuje určit, jak mají importovaná data pracovat s existujícími daty, a může to být libovolná hodnota z výčtu LoadOption . Další informace o použití tohoto parametru najdete v dokumentaci k DataTableLoad metodě.

Parametr errorHandler je FillErrorEventHandler delegát, který odkazuje na proceduru, která se volá, když dojde k chybě při načítání dat. Parametr FillErrorEventArgs předaný procedurě poskytuje vlastnosti, které umožňují načíst informace o chybě, ke které došlo, aktuálním řádku dat a DataTable vyplnění. Pomocí tohoto mechanismu delegáta můžete místo jednoduššího bloku try/catch určit chybu, zpracovat situaci a pokračovat ve zpracování, pokud chcete. Parametr FillErrorEventArgs poskytuje Continue vlastnost: nastavte tuto vlastnost tak, aby true indikovala, že jste chybu zpracovali a chcete pokračovat ve zpracování. Vlastnost nastavte tak, aby false indikovala, že chcete zastavit zpracování. Mějte na paměti, že nastavení vlastnosti způsobí false , že kód, který aktivoval problém vyvolat výjimku.

Parametr tables umožňuje zadat pole DataTable instancí, které označují pořadí tabulek odpovídajících každé sadě výsledků načtené ze čtečky. Metoda Load vyplní každou zadanou DataTable instanci dat dat z jedné sady výsledků ze zdrojové čtečky dat. Po každé sadě Load výsledků se metoda přesune na další sadu výsledků v rámci čtenáře, dokud nebudou žádné další sady výsledků.

Schéma překladu názvů pro tuto metodu je stejné jako Fill metoda následovaná metodou DbDataAdapter třídy.

Viz také

Platí pro