DataSet.Load Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Rellena un objeto DataSet con valores de un origen de datos utilizando la interfaz IDataReader proporcionada.
Sobrecargas
Load(IDataReader, LoadOption, DataTable[]) |
Rellena un objeto DataSet de valores de un origen de datos utilizando la interfaz IDataReader proporcionada, que usa una matriz de instancias de DataTable para suministrar la información sobre el espacio de nombres y el esquema. |
Load(IDataReader, LoadOption, String[]) |
Rellena un objeto DataSet de valores de un origen de datos utilizando la interfaz IDataReader proporcionada, que usa una matriz de cadenas para suministrar los nombres para las tablas de |
Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[]) |
Rellena un objeto DataSet de valores de un origen de datos utilizando la interfaz IDataReader proporcionada, que usa una matriz de instancias de DataTable para suministrar la información sobre el espacio de nombres y el esquema. |
Comentarios
El Load método proporciona una técnica para rellenar un único DataTable con datos, recuperados de una IDataReader instancia. Este método proporciona la misma funcionalidad, pero permite cargar varios conjuntos de resultados de una en IDataReader
varias tablas dentro de .DataSet
Si el objeto DataSet
ya contiene filas, los datos de entrada del origen de datos se combinan con las filas existentes.
El Load
método se puede usar en varios escenarios comunes, centrados en obtener datos de un origen de datos especificado y agregarlos al contenedor de datos actual (en este caso, un DataSet
). En estos escenarios se describe el uso estándar de , DataSet
que describe su comportamiento de actualización y combinación.
Sincroniza DataSet
o actualiza con un único origen de datos principal. DataSet
Realiza un seguimiento de los cambios, lo que permite la sincronización con el origen de datos principal. Además, un DataSet
puede aceptar datos incrementales de uno o varios orígenes de datos secundarios. DataSet
No es responsable del seguimiento de los cambios para permitir la sincronización con el origen de datos secundario.
Dados estos dos orígenes de datos hipotéticos, es probable que un usuario requiera uno de los siguientes comportamientos:
Inicialice
DataSet
a partir de un origen de datos principal. En este escenario, el usuario quiere inicializar un vacíoDataSet
con valores del origen de datos principal. Se modifican uno o varios contenidos de DataTable. Más adelante, el usuario piensa propagar los cambios al origen de datos principal.Conserve los cambios y vuelva a sincronizarse desde el origen de datos principal. En este escenario, el usuario quiere tomar el
DataSet
relleno en el escenario anterior y realizar una sincronización incremental con el origen de datos principal, conservando las modificaciones realizadas en .DataSet
Fuente de distribución de datos incremental de orígenes de datos secundarios. En este escenario, el usuario quiere combinar los cambios de uno o varios orígenes de datos secundarios y propagar esos cambios al origen de datos principal.
El Load
método hace posible todos estos escenarios. Este método permite especificar un parámetro de opción de carga, lo que indica cómo se cargan las filas que ya están en una DataTable combinación con las filas que se cargan. En la tabla siguiente se describen las tres opciones de carga proporcionadas por la LoadOption enumeración . En cada caso, la descripción indica el comportamiento cuando la clave principal de una fila de los datos entrantes coincide con la clave principal de una fila existente.
Opción de carga | Descripción |
---|---|
PreserveChanges (valor predeterminado) |
Novedades la versión original de la fila con el valor de la fila entrante. |
OverwriteChanges |
Novedades las versiones actuales y originales de la fila con el valor de la fila entrante. |
Upsert |
Novedades la versión actual de la fila con el valor de la fila entrante. |
En general, las PreserveChanges
opciones y OverwriteChanges
están pensadas para escenarios en los que el usuario necesita sincronizar y DataSet
sus cambios con el origen de datos principal. La Upsert
opción facilita la agregación de cambios de uno o varios orígenes de datos secundarios.
Load(IDataReader, LoadOption, DataTable[])
- Source:
- DataSet.cs
- Source:
- DataSet.cs
- Source:
- DataSet.cs
Rellena un objeto DataSet de valores de un origen de datos utilizando la interfaz IDataReader proporcionada, que usa una matriz de instancias de DataTable para suministrar la información sobre el espacio de nombres y el esquema.
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())
Parámetros
- reader
- IDataReader
IDataReader que proporciona uno o varios conjuntos de resultados.
- loadOption
- LoadOption
Valor de la enumeración LoadOption que indica cómo se van a combinar las filas que ya se encuentran en las instancias de DataTable, incluidas en el objeto DataSet, con las filas de entrada con las que comparten la misma clave principal.
- tables
- DataTable[]
Matriz de instancias de DataTable de las que el método Load(IDataReader, LoadOption, DataTable[]) recupera la información sobre el espacio de nombres y el nombre. Cada una de estas tablas debe ser un miembro de la colección DataTableCollection que incluye este objeto DataSet.
Ejemplos
En el ejemplo siguiente se crea un nuevo DataSet, se agregan dos DataTable instancias a y, a DataSetcontinuación, se rellena mediante el Load método y se recuperan datos de un DataTableReader objeto que contiene dos conjuntos DataSet de resultados. Por último, en el ejemplo se muestra el contenido de las tablas en la ventana de la consola.
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
Comentarios
El Load método proporciona una técnica para rellenar un único DataTable con datos, recuperados de una IDataReader instancia. Este método proporciona la misma funcionalidad, pero permite cargar varios conjuntos de resultados de una en IDataReader varias tablas dentro de .DataSet
Nota
La operación de carga producirá un InvalidOperationException error si alguna de las columnas de datos de origen de la entrada reader
son columnas calculadas.
El loadOption
parámetro permite especificar cómo desea que los datos importados interactúen con los datos existentes y pueden ser cualquiera de los valores de la LoadOption enumeración. Consulte la documentación del DataTableLoad método para obtener más información sobre el uso de este parámetro.
El tables
parámetro permite especificar una matriz de DataTable instancias, que indica el orden de las tablas correspondientes a cada conjunto de resultados cargado desde el lector. El Load método rellena cada instancia proporcionada DataTable con datos de un único conjunto de resultados del lector de datos de origen. Después de cada conjunto de resultados, el Load método pasa al siguiente conjunto de resultados dentro del lector, hasta que no haya más conjuntos de resultados.
El esquema de resolución de nombres para este método es el mismo que seguido del Fill método de la DbDataAdapter clase .
Consulte también
Se aplica a
Load(IDataReader, LoadOption, String[])
- Source:
- DataSet.cs
- Source:
- DataSet.cs
- Source:
- DataSet.cs
Rellena un objeto DataSet de valores de un origen de datos utilizando la interfaz IDataReader proporcionada, que usa una matriz de cadenas para suministrar los nombres para las tablas de 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())
Parámetros
- reader
- IDataReader
IDataReader que proporciona uno o varios conjuntos de resultados.
- loadOption
- LoadOption
Valor de la enumeración LoadOption que indica cómo se van a combinar las filas que ya se encuentran en las instancias de DataTable, incluidas en el objeto DataSet
, con las filas de entrada con las que comparten la misma clave principal.
- tables
- String[]
Matriz de cadenas de las que el método Load
recupera la información sobre el nombre de tabla.
Ejemplos
En el siguiente ejemplo de aplicación de consola se crean primero tablas y se cargan datos de un lector en , DataSetmediante el Load
método . A continuación, en el ejemplo se agregan tablas a DataSet y se intenta rellenar las tablas con datos de .DataTableReader En este ejemplo, dado que los parámetros pasados al Load
método indican un nombre de tabla que no existe, el Load
método crea una nueva tabla para que coincida con el nombre pasado como parámetro. Una vez cargados los datos, el ejemplo muestra el contenido de todas sus tablas en la ventana Consola.
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
Comentarios
El Load método proporciona una técnica para rellenar un único DataTable con datos, recuperados de una IDataReader instancia. Este método proporciona la misma funcionalidad, pero permite cargar varios conjuntos de resultados de una en IDataReader
varias tablas dentro de .DataSet
Nota
La operación de carga producirá un InvalidOperationException error si alguna de las columnas de datos de origen de la entrada reader
son columnas calculadas.
El loadOption
parámetro permite especificar cómo desea que los datos importados interactúen con los datos existentes y pueden ser cualquiera de los valores de la LoadOption enumeración. Consulte la documentación del Load método para obtener más información sobre el uso de este parámetro.
El tables
parámetro permite especificar una matriz de nombres de tabla, que indica el orden de las tablas correspondientes a cada conjunto de resultados cargado desde el lector. El Load
método intenta buscar una tabla dentro del DataSet
nombre que se encuentra en la matriz de nombres de tabla, en orden. Si se encuentra una tabla coincidente, esa tabla se carga con el contenido del conjunto de resultados actual. Si no se encuentra ninguna tabla coincidente, se crea una tabla con el nombre proporcionado en la matriz de nombres de tabla y el esquema de la nueva tabla se deduce del conjunto de resultados. Después de cada conjunto de resultados, el Load
método pasa al siguiente conjunto de resultados dentro del lector, hasta que no haya más conjuntos de resultados.
El espacio de nombres predeterminado asociado a DataSet
, si existe, está asociado a cada objeto recién creado DataTable
. El esquema de resolución de nombres para este método es el mismo que seguido del Fill método de la DbDataAdapter clase .
Consulte también
Se aplica a
Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[])
- Source:
- DataSet.cs
- Source:
- DataSet.cs
- Source:
- DataSet.cs
Rellena un objeto DataSet de valores de un origen de datos utilizando la interfaz IDataReader proporcionada, que usa una matriz de instancias de DataTable para suministrar la información sobre el espacio de nombres y el esquema.
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())
Parámetros
- reader
- IDataReader
IDataReader que proporciona uno o varios conjuntos de resultados.
- loadOption
- LoadOption
Valor de la enumeración LoadOption que indica cómo se van a combinar las filas que ya se encuentran en las instancias de DataTable, incluidas en el objeto DataSet, con las filas de entrada con las que comparten la misma clave principal.
- errorHandler
- FillErrorEventHandler
Delegado FillErrorEventHandler al que se va a llamar cuando se produzca un error mientras se cargan los datos.
- tables
- DataTable[]
Matriz de instancias de DataTable de las que el método Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[]) recupera la información sobre el espacio de nombres y el nombre.
Ejemplos
En el ejemplo siguiente se agrega una tabla a y, a DataSetcontinuación, se intenta usar el Load método para cargar datos de un DataTableReader objeto que contiene un esquema incompatible. En lugar de capturar el error, en este ejemplo se usa un FillErrorEventHandler delegado para investigar y controlar el error. La salida se muestra en la ventana de la consola.
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
Comentarios
El Load método proporciona una técnica para rellenar un único DataTable con datos, recuperados de una IDataReader instancia. Este método proporciona la misma funcionalidad, pero permite cargar varios conjuntos de resultados de una en IDataReader varias tablas dentro de .DataSet
Nota
La operación de carga producirá un InvalidOperationException error si alguna de las columnas de datos de origen de la entrada reader
son columnas calculadas.
El loadOption
parámetro permite especificar cómo desea que los datos importados interactúen con los datos existentes y pueden ser cualquiera de los valores de la LoadOption enumeración. Consulte la documentación del DataTableLoad método para obtener más información sobre el uso de este parámetro.
El errorHandler
parámetro es un FillErrorEventHandler delegado que hace referencia a un procedimiento al que se llama cuando se produce un error al cargar datos. El FillErrorEventArgs parámetro pasado al procedimiento proporciona propiedades que permiten recuperar información sobre el error que se produjo, la fila actual de datos y el DataTable que se va a rellenar. El uso de este mecanismo de delegado, en lugar de un bloque try/catch más sencillo, le permite determinar el error, controlar la situación y continuar procesando si lo desea. El FillErrorEventArgs parámetro proporciona una Continue propiedad: establezca esta propiedad en true
para indicar que ha controlado el error y desea continuar el procesamiento; establezca la propiedad false
en para indicar que desea detener el procesamiento. Tenga en cuenta que establecer la propiedad en false
hace que el código que desencadene el problema produzca una excepción.
El tables
parámetro permite especificar una matriz de DataTable instancias, que indica el orden de las tablas correspondientes a cada conjunto de resultados cargado desde el lector. El Load método rellena cada instancia proporcionada DataTable con datos de un único conjunto de resultados del lector de datos de origen. Después de cada conjunto de resultados, el Load método pasa al siguiente conjunto de resultados dentro del lector, hasta que no haya más conjuntos de resultados.
El esquema de resolución de nombres para este método es el mismo que seguido del Fill método de la DbDataAdapter clase .