DataSet.Load Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Vult een DataSet met waarden uit een gegevensbron op met behulp van de opgegeven IDataReader.
Overloads
| Name | Description |
|---|---|
| Load(IDataReader, LoadOption, DataTable[]) |
Vult een DataSet met waarden uit een gegevensbron met behulp van de opgegeven IDataReader, met behulp van een matrix met DataTable exemplaren om de schema- en naamruimtegegevens op te geven. |
| Load(IDataReader, LoadOption, String[]) |
Vult een DataSet met waarden uit een gegevensbron met behulp van de opgegeven IDataReader, met behulp van een matrix met tekenreeksen om de namen voor de tabellen binnen de |
| Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[]) |
Vult een DataSet met waarden uit een gegevensbron met behulp van de opgegeven IDataReader, met behulp van een matrix met DataTable exemplaren om de schema- en naamruimtegegevens op te geven. |
Opmerkingen
De Load methode biedt een techniek voor het vullen van één DataTable met gegevens, opgehaald uit een IDataReader exemplaar. Deze methode biedt dezelfde functionaliteit, maar u kunt meerdere resultatensets laden vanuit een IDataReader in meerdere tabellen binnen een DataSet.
Als de DataSet al rijen bevat, worden de binnenkomende gegevens uit de gegevensbron samengevoegd met de bestaande rijen.
De Load methode kan worden gebruikt in verschillende veelvoorkomende scenario's, waarbij alle gecentreerd zijn om gegevens op te halen uit een opgegeven gegevensbron en deze toe te voegen aan de huidige gegevenscontainer (in dit geval een DataSet). In deze scenario's wordt standaardgebruik beschreven voor een DataSet, waarin het update- en samenvoeggedrag wordt beschreven.
Een DataSet synchronisatie of updates met één primaire gegevensbron. Hiermee DataSet worden wijzigingen bijgehouden, waardoor synchronisatie met de primaire gegevensbron mogelijk is. Daarnaast kan een DataSet database incrementele gegevens uit een of meer secundaire gegevensbronnen accepteren. Het DataSet is niet verantwoordelijk voor het bijhouden van wijzigingen om synchronisatie met de secundaire gegevensbron toe te staan.
Gezien deze twee hypothetische gegevensbronnen is een gebruiker waarschijnlijk een van de volgende gedragingen vereist:
Initialiseer
DataSetvanuit een primaire gegevensbron. In dit scenario wil de gebruiker een legeDataSetwaarde initialiseren met waarden uit de primaire gegevensbron. De inhoud van een of meer datatable's wordt gewijzigd. Later wil de gebruiker wijzigingen doorgeven aan de primaire gegevensbron.Wijzigingen behouden en opnieuw synchroniseren vanuit de primaire gegevensbron. In dit scenario wil de gebruiker het
DataSetingevulde scenario invullen en een incrementele synchronisatie uitvoeren met de primaire gegevensbron, waarbij de wijzigingen in deDataSetgegevensbron behouden blijven.Incrementele gegevensfeed van secundaire gegevensbronnen. In dit scenario wil de gebruiker wijzigingen uit een of meer secundaire gegevensbronnen samenvoegen en deze wijzigingen doorgeven aan de primaire gegevensbron.
De Load methode maakt al deze scenario's mogelijk. Met deze methode kunt u een parameter voor belastingsopties opgeven, waarmee wordt aangegeven hoe rijen al in een DataTable combinatie met rijen worden geladen. In de volgende tabel worden de drie laadopties beschreven die worden geboden door de LoadOption opsomming. In elk geval geeft de beschrijving het gedrag aan wanneer de primaire sleutel van een rij in de binnenkomende gegevens overeenkomt met de primaire sleutel van een bestaande rij.
| Optie voor laden | Description |
|---|---|
PreserveChanges (standaard) |
Hiermee wordt de oorspronkelijke versie van de rij bijgewerkt met de waarde van de binnenkomende rij. |
OverwriteChanges |
Hiermee werkt u de huidige en oorspronkelijke versies van de rij bij met de waarde van de binnenkomende rij. |
Upsert |
Hiermee wordt de huidige versie van de rij bijgewerkt met de waarde van de binnenkomende rij. |
Over het algemeen zijn de PreserveChanges en OverwriteChanges opties bedoeld voor scenario's waarin de gebruiker de DataSet en de wijzigingen moet synchroniseren met de primaire gegevensbron. De Upsert optie vereenvoudigt het samenvoegen van wijzigingen uit een of meer secundaire gegevensbronnen.
Load(IDataReader, LoadOption, DataTable[])
Vult een DataSet met waarden uit een gegevensbron met behulp van de opgegeven IDataReader, met behulp van een matrix met DataTable exemplaren om de schema- en naamruimtegegevens op te geven.
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())
Parameters
- reader
- IDataReader
Een IDataReader met een of meer resultatensets.
- loadOption
- LoadOption
Een waarde uit de LoadOption opsomming die aangeeft hoe rijen die zich al in de DataTable exemplaren in de DataSet instanties bevinden, worden gecombineerd met binnenkomende rijen die dezelfde primaire sleutel delen.
- tables
- DataTable[]
Een matrix met DataTable exemplaren waaruit de Load(IDataReader, LoadOption, DataTable[]) methode naam- en naamruimtegegevens ophaalt. Elk van deze tabellen moet lid zijn van de DataTableCollection tabel die hierin DataSetis opgenomen.
Voorbeelden
In het volgende voorbeeld wordt een nieuwe DataSetgemaakt, worden twee DataTable exemplaren aan de DataSetinstantie toegevoegd en wordt vervolgens de DataSet methode Load gebruikt om gegevens op te halen uit een DataTableReader instantie die twee resultatensets bevat. Ten slotte wordt in het voorbeeld de inhoud van de tabellen in het consolevenster weergegeven.
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
Opmerkingen
De Load methode biedt een techniek voor het vullen van één DataTable met gegevens, opgehaald uit een IDataReader exemplaar. Deze methode biedt dezelfde functionaliteit, maar u kunt meerdere resultatensets laden vanuit een IDataReader in meerdere tabellen binnen een DataSet.
Note
De laadbewerking mislukt met een InvalidOperationException van de brongegevenskolommen in de binnenkomende reader kolommen.
loadOption Met de parameter kunt u opgeven hoe u de geïmporteerde gegevens wilt laten communiceren met bestaande gegevens, en kunt u een van de waarden uit de LoadOption opsomming zijn. Raadpleeg de documentatie voor de DataTableLoad methode voor meer informatie over het gebruik van deze parameter.
tables Met de parameter kunt u een matrix van DataTable exemplaren opgeven, waarmee de volgorde wordt aangegeven van de tabellen die overeenkomen met elke resultatenset die vanuit de lezer wordt geladen. De Load methode vult elk opgegeven DataTable exemplaar met gegevens uit één resultatenset van de brongegevenslezer. Na elke resultatenset wordt de Load methode verplaatst naar de volgende resultatenset in de lezer, totdat er geen resultatensets meer zijn.
Het naamomzettingsschema voor deze methode is hetzelfde als dat gevolgd door de Fill methode van de DbDataAdapter klasse.
Zie ook
Van toepassing op
Load(IDataReader, LoadOption, String[])
Vult een DataSet met waarden uit een gegevensbron met behulp van de opgegeven IDataReader, met behulp van een matrix met tekenreeksen om de namen voor de tabellen binnen de DataSettabel op te geven.
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())
Parameters
- reader
- IDataReader
Een IDataReader met een of meer resultatensets.
- loadOption
- LoadOption
Een waarde uit de LoadOption opsomming die aangeeft hoe rijen die zich al in de DataTable exemplaren in de DataSet instanties bevinden, worden gecombineerd met binnenkomende rijen die dezelfde primaire sleutel delen.
- tables
- String[]
Een matrix met tekenreeksen waaruit de Load methode tabelnaamgegevens ophaalt.
Voorbeelden
In het volgende consoletoepassingsvoorbeeld worden eerst tabellen gemaakt en gegevens van een lezer geladen in een DataSet, met behulp van de Load methode. Het voorbeeld voegt vervolgens tabellen toe aan een DataSet tabel en probeert de tabellen te vullen met gegevens uit een DataTableReader. Omdat de parameters die aan de Load methode zijn doorgegeven, in dit voorbeeld een tabelnaam aangeven die niet bestaat, wordt met de Load methode een nieuwe tabel gemaakt die overeenkomt met de naam die als parameter is doorgegeven. Zodra de gegevens zijn geladen, wordt in het voorbeeld de inhoud van alle tabellen in het consolevenster weergegeven.
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
Opmerkingen
De Load methode biedt een techniek voor het vullen van één DataTable met gegevens, opgehaald uit een IDataReader exemplaar. Deze methode biedt dezelfde functionaliteit, maar u kunt meerdere resultatensets laden vanuit een IDataReader in meerdere tabellen binnen een DataSet.
Note
De laadbewerking mislukt met een InvalidOperationException van de brongegevenskolommen in de binnenkomende reader kolommen.
loadOption Met de parameter kunt u opgeven hoe u de geïmporteerde gegevens wilt laten communiceren met bestaande gegevens, en kunt u een van de waarden uit de LoadOption opsomming zijn. Raadpleeg de documentatie voor de Load methode voor meer informatie over het gebruik van deze parameter.
Met tables de parameter kunt u een matrix met tabelnamen opgeven, waarmee de volgorde wordt aangegeven van de tabellen die overeenkomen met elke resultatenset die vanuit de lezer wordt geladen. De Load methode probeert een tabel te vinden binnen de DataSet overeenkomende naam die is gevonden in de matrix met tabelnamen, in volgorde. Als er een overeenkomende tabel wordt gevonden, wordt die tabel geladen met de inhoud van de huidige resultatenset. Als er geen overeenkomende tabel wordt gevonden, wordt er een tabel gemaakt met behulp van de naam die is opgegeven in de matrix met tabelnamen en wordt het schema van de nieuwe tabel afgeleid uit de resultatenset. Na elke resultatenset wordt de Load methode verplaatst naar de volgende resultatenset in de lezer, totdat er geen resultatensets meer zijn.
De standaardnaamruimte die is gekoppeld aan DataSet, indien aanwezig, is gekoppeld aan elke nieuw gemaakte DataTablenaamruimte. Het naamomzettingsschema voor deze methode is hetzelfde als dat gevolgd door de Fill methode van de DbDataAdapter klasse.
Zie ook
Van toepassing op
Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[])
Vult een DataSet met waarden uit een gegevensbron met behulp van de opgegeven IDataReader, met behulp van een matrix met DataTable exemplaren om de schema- en naamruimtegegevens op te geven.
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);
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())
Parameters
- reader
- IDataReader
Een IDataReader met een of meer resultatensets.
- loadOption
- LoadOption
Een waarde uit de LoadOption opsomming die aangeeft hoe rijen die zich al in de DataTable exemplaren in de DataSet instanties bevinden, worden gecombineerd met binnenkomende rijen die dezelfde primaire sleutel delen.
- errorHandler
- FillErrorEventHandler
Een FillErrorEventHandler gemachtigde die moet worden aangeroepen wanneer er een fout optreedt tijdens het laden van gegevens.
- tables
- DataTable[]
Een matrix met DataTable exemplaren waaruit de Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[]) methode naam- en naamruimtegegevens ophaalt.
Voorbeelden
In het volgende voorbeeld wordt een tabel aan een DataSettabel toegevoegd en wordt vervolgens geprobeerd de Load methode te gebruiken om gegevens te laden uit een met DataTableReader een niet-compatibel schema. In plaats van de fout te vangen, gebruikt dit voorbeeld een FillErrorEventHandler gemachtigde om de fout te onderzoeken en af te handelen. De uitvoer wordt weergegeven in het consolevenster.
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
Opmerkingen
De Load methode biedt een techniek voor het vullen van één DataTable met gegevens, opgehaald uit een IDataReader exemplaar. Deze methode biedt dezelfde functionaliteit, maar u kunt meerdere resultatensets laden vanuit een IDataReader in meerdere tabellen binnen een DataSet.
Note
De laadbewerking mislukt met een InvalidOperationException van de brongegevenskolommen in de binnenkomende reader kolommen.
loadOption Met de parameter kunt u opgeven hoe u de geïmporteerde gegevens wilt laten communiceren met bestaande gegevens, en kunt u een van de waarden uit de LoadOption opsomming zijn. Raadpleeg de documentatie voor de DataTableLoad methode voor meer informatie over het gebruik van deze parameter.
De errorHandler parameter is een FillErrorEventHandler gemachtigde die verwijst naar een procedure die wordt aangeroepen wanneer er een fout optreedt tijdens het laden van gegevens. De FillErrorEventArgs parameter die aan de procedure wordt doorgegeven, bevat eigenschappen waarmee u informatie kunt ophalen over de fout die is opgetreden, de huidige rij met gegevens en de DataTable ingevulde gegevens. Met behulp van dit gedelegeerde mechanisme, in plaats van een eenvoudiger try/catch-blok, kunt u de fout bepalen, de situatie afhandelen en doorgaan met verwerken als u wilt. De FillErrorEventArgs parameter levert een Continue eigenschap: stel deze eigenschap in om aan true te geven dat u de fout hebt verwerkt en wilt doorgaan met verwerken. Stel de eigenschap in om false aan te geven dat u de verwerking wilt stoppen. Houd er rekening mee dat het instellen van de eigenschap ervoor false zorgt dat de code die het probleem heeft veroorzaakt, een uitzondering genereert.
tables Met de parameter kunt u een matrix van DataTable exemplaren opgeven, waarmee de volgorde wordt aangegeven van de tabellen die overeenkomen met elke resultatenset die vanuit de lezer wordt geladen. De Load methode vult elk opgegeven DataTable exemplaar met gegevens uit één resultatenset van de brongegevenslezer. Na elke resultatenset wordt de Load methode verplaatst naar de volgende resultatenset in de lezer, totdat er geen resultatensets meer zijn.
Het naamomzettingsschema voor deze methode is hetzelfde als dat gevolgd door de Fill methode van de DbDataAdapter klasse.