DataSet.Load Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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 |
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í , DataSet
popisují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.