DataSet.Load Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Заполняет таблицу DataSet значениями из источника данных с помощью предоставляемого объекта IDataReader.
Перегрузки
Load(IDataReader, LoadOption, DataTable[]) |
Заполняет набор данных DataSet значениями из источника данных с помощью предоставляемого объекта IDataReader, использующего массив экземпляров DataTable для предоставления сведений о схеме и пространстве имен. |
Load(IDataReader, LoadOption, String[]) |
Заполняет набор данных DataSet значениями из источника данных с помощью предоставляемого объекта IDataReader, используя массив строк для предоставления имен таблиц в наборе данных |
Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[]) |
Заполняет набор данных DataSet значениями из источника данных с помощью предоставляемого объекта IDataReader, использующего массив экземпляров DataTable для предоставления сведений о схеме и пространстве имен. |
Комментарии
Метод Load предоставляет метод заполнения отдельного объекта DataTable данными, полученными из экземпляра IDataReader . Этот метод предоставляет те же функции, но позволяет загружать несколько результирующих наборов из в IDataReader
несколько таблиц в DataSet
.
Если объект DataSet
уже содержит строки, входящие данные из источника данных объединяются с существующими строками.
Метод Load
можно использовать в нескольких распространенных сценариях, которые сосредоточены на получении данных из указанного источника данных и их добавлении в текущий контейнер данных (в данном случае — ).DataSet
Эти сценарии описывают стандартное DataSet
использование для , описывая его поведение обновления и слияния.
Выполняет DataSet
синхронизацию или обновление с одним первичным источником данных. Отслеживает DataSet
изменения, позволяя выполнять синхронизацию с основным источником данных. Кроме того, DataSet
объект может принимать добавочные данные из одного или нескольких вторичных источников данных. не DataSet
отвечает за отслеживание изменений, чтобы разрешить синхронизацию с дополнительным источником данных.
Учитывая эти два гипотетических источника данных, пользователю, скорее всего, потребуется одно из следующих действий:
Инициализация
DataSet
из первичного источника данных. В этом сценарии пользователь хочет инициализировать пустойDataSet
объект со значениями из основного источника данных. Изменяется одно или несколько содержимого DataTable. Позже пользователь намерен распространить изменения обратно в основной источник данных.Сохранение изменений и повторная синхронизация из основного источника данных. В этом сценарии пользователь хочет получить
DataSet
заполненное в предыдущем сценарии и выполнить добавочную синхронизацию с основным источником данных, сохраняя изменения, внесенные вDataSet
.Добавочный веб-канал данных из вторичных источников данных. В этом сценарии пользователь хочет объединить изменения из одного или нескольких вторичных источников данных и распространить эти изменения обратно в основной источник данных.
Метод Load
делает возможными все эти сценарии. Этот метод позволяет указать параметр параметра загрузки, указывающий, как строки, уже имеющиеся в , DataTable объединяются с загружаемыми строками. В следующей таблице описаны три параметра загрузки, предоставляемые перечислением LoadOption . В каждом случае описание указывает поведение, когда первичный ключ строки во входящих данных совпадает с первичным ключом существующей строки.
Параметр загрузки | Описание |
---|---|
PreserveChanges (по умолчанию) |
Обновления исходную версию строки со значением входящей строки. |
OverwriteChanges |
Обновления текущую и исходную версии строки значением входящей строки. |
Upsert |
Обновления текущую версию строки со значением входящей строки. |
Как правило, параметры и OverwriteChanges
предназначены для сценариев, PreserveChanges
в которых пользователю необходимо синхронизировать DataSet
и его изменения с основным источником данных. Параметр Upsert
упрощает агрегирование изменений из одного или нескольких вторичных источников данных.
Load(IDataReader, LoadOption, DataTable[])
- Исходный код:
- DataSet.cs
- Исходный код:
- DataSet.cs
- Исходный код:
- DataSet.cs
Заполняет набор данных DataSet значениями из источника данных с помощью предоставляемого объекта IDataReader, использующего массив экземпляров DataTable для предоставления сведений о схеме и пространстве имен.
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())
Параметры
- reader
- IDataReader
Объект IDataReader, предоставляющий один или несколько наборов результатов.
- loadOption
- LoadOption
Значение из перечисления LoadOption, которое указывает, как строки, уже находящиеся в экземплярах DataTable набора данных DataSet, должны объединяться со входящими строками, имеющими общий первичный ключ.
- tables
- DataTable[]
Массив экземпляров DataTable, из которых метод Load(IDataReader, LoadOption, DataTable[]) получает сведения об имени и пространстве имен. Каждая из этих таблиц должна являться членом коллекции DataTableCollection, находящейся в этом наборе данных DataSet.
Примеры
В следующем примере создается новый DataSetобъект , добавляется два DataTable экземпляра DataSetв , а затем заполняется DataSet с помощью Load метода , извлекая данные из DataTableReader , который содержит два результирующих набора. Наконец, в примере отображается содержимое таблиц в окне консоли.
static void Main()
{
DataSet dataSet = new DataSet();
DataTable customerTable = new DataTable();
DataTable productTable = new DataTable();
// This information is cosmetic, only.
customerTable.TableName = "Customers";
productTable.TableName = "Products";
// Add the tables to the DataSet:
dataSet.Tables.Add(customerTable);
dataSet.Tables.Add(productTable);
// Load the data into the existing DataSet.
DataTableReader reader = GetReader();
dataSet.Load(reader, LoadOption.OverwriteChanges,
customerTable, productTable);
// Print out the contents of each table:
foreach (DataTable table in dataSet.Tables)
{
PrintColumns(table);
}
Console.WriteLine("Press any key to continue.");
Console.ReadKey();
}
private static DataTable GetCustomers()
{
// Create sample Customers table.
DataTable table = new DataTable();
table.TableName = "Customers";
// Create two columns, ID and Name.
DataColumn idColumn = table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name", typeof(string));
// Set the ID column as the primary key column.
table.PrimaryKey = new DataColumn[] { idColumn };
table.Rows.Add(new object[] { 0, "Mary" });
table.Rows.Add(new object[] { 1, "Andy" });
table.Rows.Add(new object[] { 2, "Peter" });
table.AcceptChanges();
return table;
}
private static DataTable GetProducts()
{
// Create sample Products table.
DataTable table = new DataTable();
table.TableName = "Products";
// Create two columns, ID and Name.
DataColumn idColumn = table.Columns.Add("ID",
typeof(int));
table.Columns.Add("Name", typeof(string));
// Set the ID column as the primary key column.
table.PrimaryKey = new DataColumn[] { idColumn };
table.Rows.Add(new object[] { 0, "Wireless Network Card" });
table.Rows.Add(new object[] { 1, "Hard Drive" });
table.Rows.Add(new object[] { 2, "Monitor" });
table.Rows.Add(new object[] { 3, "CPU" });
table.AcceptChanges();
return table;
}
private static void PrintColumns(DataTable table)
{
Console.WriteLine();
Console.WriteLine(table.TableName);
Console.WriteLine("=========================");
// Loop through all the rows in the table:
foreach (DataRow row in table.Rows)
{
for (int i = 0; i < table.Columns.Count; i++)
{
Console.Write(row[i] + " ");
}
Console.WriteLine();
}
}
private static DataTableReader GetReader()
{
// Return a DataTableReader containing multiple
// result sets, just for the sake of this demo.
DataSet dataSet = new DataSet();
dataSet.Tables.Add(GetCustomers());
dataSet.Tables.Add(GetProducts());
return dataSet.CreateDataReader();
}
Sub Main()
Dim dataSet As New DataSet
Dim customerTable As New DataTable
Dim productTable As New DataTable
' This information is cosmetic, only.
customerTable.TableName = "Customers"
productTable.TableName = "Products"
' Add the tables to the DataSet:
dataSet.Tables.Add(customerTable)
dataSet.Tables.Add(productTable)
' Load the data into the existing DataSet.
Dim reader As DataTableReader = GetReader()
dataSet.Load(reader, LoadOption.OverwriteChanges, _
customerTable, productTable)
' Print out the contents of each table:
For Each table As DataTable In dataSet.Tables
PrintColumns(table)
Next
Console.WriteLine("Press any key to continue.")
Console.ReadKey()
End Sub
Private Function GetCustomers() As DataTable
' Create sample Customers table.
Dim table As New DataTable
table.TableName = "Customers"
' Create two columns, ID and Name.
Dim idColumn As DataColumn = table.Columns.Add("ID", _
GetType(Integer))
table.Columns.Add("Name", GetType(String))
' Set the ID column as the primary key column.
table.PrimaryKey = New DataColumn() {idColumn}
table.Rows.Add(New Object() {0, "Mary"})
table.Rows.Add(New Object() {1, "Andy"})
table.Rows.Add(New Object() {2, "Peter"})
table.AcceptChanges()
Return table
End Function
Private Function GetProducts() As DataTable
' Create sample Products table, in order
' to demonstrate the behavior of the DataTableReader.
Dim table As New DataTable
table.TableName = "Products"
' Create two columns, ID and Name.
Dim idColumn As DataColumn = table.Columns.Add("ID", _
GetType(Integer))
table.Columns.Add("Name", GetType(String))
' Set the ID column as the primary key column.
table.PrimaryKey = New DataColumn() {idColumn}
table.Rows.Add(New Object() {0, "Wireless Network Card"})
table.Rows.Add(New Object() {1, "Hard Drive"})
table.Rows.Add(New Object() {2, "Monitor"})
table.Rows.Add(New Object() {3, "CPU"})
Return table
End Function
Private Function GetReader() As DataTableReader
' Return a DataTableReader containing multiple
' result sets, just for the sake of this demo.
Dim dataSet As New DataSet
dataSet.Tables.Add(GetCustomers())
dataSet.Tables.Add(GetProducts())
Return dataSet.CreateDataReader()
End Function
Private Sub PrintColumns( _
ByVal table As DataTable)
Console.WriteLine()
Console.WriteLine(table.TableName)
Console.WriteLine("=========================")
' Loop through all the rows in the table.
For Each row As DataRow In table.Rows
For Each col As DataColumn In table.Columns
Console.Write(row(col).ToString() & " ")
Next
Console.WriteLine()
Next
End Sub
Комментарии
Метод Load предоставляет метод заполнения отдельного объекта DataTable данными, полученными из экземпляра IDataReader . Этот метод предоставляет те же функции, но позволяет загружать несколько результирующих наборов из в IDataReader несколько таблиц в DataSet.
Примечание
Операция загрузки завершится ошибкой InvalidOperationException , если какой-либо из исходных столбцов данных во входящих reader
являются вычисляемых столбцами.
Параметр loadOption
позволяет указать, как импортированные данные должны взаимодействовать с существующими данными, и может быть любым из значений из перечисления LoadOption . Дополнительные сведения об использовании этого параметра см. в документации DataTableLoad по методу .
Параметр tables
позволяет указать массив экземпляров, указывающий DataTable порядок таблиц, соответствующих каждому результирующий набор, загруженный из средства чтения. Метод Load заполняет каждый предоставленный DataTable экземпляр данными из одного результируемого набора из средства чтения исходных данных. После каждого результирующих наборов Load метод переходит к следующему результирующем набору в средстве чтения, пока не будет больше результирующих наборов.
Схема разрешения имен для этого метода аналогична схеме Fill , за которой следует метод DbDataAdapter класса .
См. также раздел
Применяется к
Load(IDataReader, LoadOption, String[])
- Исходный код:
- DataSet.cs
- Исходный код:
- DataSet.cs
- Исходный код:
- DataSet.cs
Заполняет набор данных DataSet значениями из источника данных с помощью предоставляемого объекта IDataReader, используя массив строк для предоставления имен таблиц в наборе данных 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())
Параметры
- reader
- IDataReader
Объект IDataReader, предоставляющий один или несколько наборов результатов.
- loadOption
- LoadOption
Значение из перечисления LoadOption, которое указывает, как строки, уже находящиеся в экземплярах DataTable набора данных DataSet
, должны объединяться со входящими строками, имеющими общий первичный ключ.
- tables
- String[]
Массив строк, из которого метод Load
получает сведения об именах таблиц.
Примеры
В следующем примере консольного приложения сначала создаются таблицы и данные из средства чтения загружаются в DataSetс помощью Load
метода . Затем пример добавляет таблицы в DataSet и пытается заполнить таблицы данными из DataTableReader. В этом примере, поскольку параметры, передаваемые Load
методу, указывают на несуществующее имя таблицы, Load
метод создает новую таблицу в соответствии с именем, переданным в качестве параметра. После загрузки данных в примере отображается содержимое всех таблиц в окне Консоли.
static void Main()
{
DataSet dataSet = new DataSet();
DataTableReader reader = GetReader();
// The tables listed as parameters for the Load method
// should be in the same order as the tables within the IDataReader.
dataSet.Load(reader, LoadOption.Upsert, "Customers", "Products");
foreach (DataTable table in dataSet.Tables)
{
PrintColumns(table);
}
// Now try the example with the DataSet
// already filled with data:
dataSet = new DataSet();
dataSet.Tables.Add(GetCustomers());
dataSet.Tables.Add(GetProducts());
// Retrieve a data reader containing changed data:
reader = GetReader();
// Load the data into the existing DataSet. Retrieve the order of the
// the data in the reader from the
// list of table names in the parameters. If you specify
// a new table name here, the Load method will create
// a corresponding new table.
dataSet.Load(reader, LoadOption.Upsert,
"NewCustomers", "Products");
foreach (DataTable table in dataSet.Tables)
{
PrintColumns(table);
}
Console.WriteLine("Press any key to continue.");
Console.ReadKey();
}
private static DataTable GetCustomers()
{
// Create sample Customers table.
DataTable table = new DataTable();
table.TableName = "Customers";
// Create two columns, ID and Name.
DataColumn idColumn = table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name", typeof(string));
// Set the ID column as the primary key column.
table.PrimaryKey = new DataColumn[] { idColumn };
table.Rows.Add(new object[] { 0, "Mary" });
table.Rows.Add(new object[] { 1, "Andy" });
table.Rows.Add(new object[] { 2, "Peter" });
table.AcceptChanges();
return table;
}
private static DataTable GetProducts()
{
// Create sample Products table.
DataTable table = new DataTable();
table.TableName = "Products";
// Create two columns, ID and Name.
DataColumn idColumn = table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name", typeof(string));
// Set the ID column as the primary key column.
table.PrimaryKey = new DataColumn[] { idColumn };
table.Rows.Add(new object[] { 0, "Wireless Network Card" });
table.Rows.Add(new object[] { 1, "Hard Drive" });
table.Rows.Add(new object[] { 2, "Monitor" });
table.Rows.Add(new object[] { 3, "CPU" });
table.AcceptChanges();
return table;
}
private static void PrintColumns(DataTable table)
{
Console.WriteLine();
Console.WriteLine(table.TableName);
Console.WriteLine("=========================");
// Loop through all the rows in the table:
foreach (DataRow row in table.Rows)
{
for (int i = 0; i < table.Columns.Count; i++)
{
Console.Write(row[i] + " ");
}
Console.WriteLine();
}
}
private static DataTableReader GetReader()
{
// Return a DataTableReader containing multiple
// result sets, just for the sake of this demo.
DataSet dataSet = new DataSet();
dataSet.Tables.Add(GetCustomers());
dataSet.Tables.Add(GetProducts());
return dataSet.CreateDataReader();
}
Sub Main()
Dim dataSet As New DataSet
Dim table As DataTable
Dim reader As DataTableReader = GetReader()
' The tables listed as parameters for the Load method
' should be in the same order as the tables within the IDataReader.
dataSet.Load(reader, LoadOption.Upsert, "Customers", "Products")
For Each table In dataSet.Tables
PrintColumns(table)
Next
' Now try the example with the DataSet
' already filled with data:
dataSet = New DataSet
dataSet.Tables.Add(GetCustomers())
dataSet.Tables.Add(GetProducts())
' Retrieve a data reader containing changed data:
reader = GetReader()
' Load the data into the existing DataSet. Retrieve the order of the
' the data in the reader from the
' list of table names in the parameters. If you specify
' a new table name here, the Load method will create
' a corresponding new table.
dataSet.Load(reader, LoadOption.Upsert, "NewCustomers", "Products")
For Each table In dataSet.Tables
PrintColumns(table)
Next
Console.WriteLine("Press any key to continue.")
Console.ReadKey()
End Sub
Private Function GetCustomers() As DataTable
' Create sample Customers table.
Dim table As New DataTable
table.TableName = "Customers"
' Create two columns, ID and Name.
Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
table.Columns.Add("Name", GetType(String))
' Set the ID column as the primary key column.
table.PrimaryKey = New DataColumn() {idColumn}
table.Rows.Add(New Object() {0, "Mary"})
table.Rows.Add(New Object() {1, "Andy"})
table.Rows.Add(New Object() {2, "Peter"})
table.AcceptChanges()
Return table
End Function
Private Function GetProducts() As DataTable
' Create sample Products table, in order
' to demonstrate the behavior of the DataTableReader.
Dim table As New DataTable
table.TableName = "Products"
' Create two columns, ID and Name.
Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
table.Columns.Add("Name", GetType(String))
' Set the ID column as the primary key column.
table.PrimaryKey = New DataColumn() {idColumn}
table.Rows.Add(New Object() {0, "Wireless Network Card"})
table.Rows.Add(New Object() {1, "Hard Drive"})
table.Rows.Add(New Object() {2, "Monitor"})
table.Rows.Add(New Object() {3, "CPU"})
Return table
End Function
Private Function GetReader() As DataTableReader
' Return a DataTableReader containing multiple
' result sets, just for the sake of this demo.
Dim dataSet As New DataSet
dataSet.Tables.Add(GetCustomers())
dataSet.Tables.Add(GetProducts())
Return dataSet.CreateDataReader()
End Function
Private Sub PrintColumns( _
ByVal table As DataTable)
Console.WriteLine()
Console.WriteLine(table.TableName)
Console.WriteLine("=========================")
' Loop through all the rows in the table.
For Each row As DataRow In table.Rows
For Each col As DataColumn In table.Columns
Console.Write(row(col).ToString() & " ")
Next
Console.WriteLine()
Next
End Sub
Комментарии
Метод Load предоставляет метод заполнения отдельного объекта DataTable данными, полученными из экземпляра IDataReader . Этот метод предоставляет те же функции, но позволяет загружать несколько результирующих наборов из в IDataReader
несколько таблиц в DataSet
.
Примечание
Операция загрузки завершится ошибкой InvalidOperationException , если какой-либо из исходных столбцов данных во входящих reader
являются вычисляемых столбцами.
Параметр loadOption
позволяет указать, как импортированные данные должны взаимодействовать с существующими данными, и может быть любым из значений из перечисления LoadOption . Дополнительные сведения об использовании этого параметра см. в документации Load по методу .
Параметр tables
позволяет указать массив имен таблиц, указывающий порядок таблиц, соответствующий каждому результирующий набор, загруженный из средства чтения. Метод Load
пытается найти таблицу в соответствии DataSet
с именем, найденным в массиве имен таблиц, по порядку. Если найдена соответствующая таблица, она загружается с содержимым текущего результирующий набор. Если соответствующая таблица не найдена, создается таблица с именем, указанным в массиве имен таблиц, а схема новой таблицы выводится из результирующих наборов. После каждого результирующих наборов Load
метод переходит к следующему результирующем набору в средстве чтения, пока не будет больше результирующих наборов.
Пространство имен по умолчанию, связанное с DataSet
, если таковое имеется, связано с каждым вновь созданным DataTable
. Схема разрешения имен для этого метода аналогична схеме Fill , за которой следует метод DbDataAdapter класса .
См. также раздел
Применяется к
Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[])
- Исходный код:
- DataSet.cs
- Исходный код:
- DataSet.cs
- Исходный код:
- DataSet.cs
Заполняет набор данных DataSet значениями из источника данных с помощью предоставляемого объекта IDataReader, использующего массив экземпляров DataTable для предоставления сведений о схеме и пространстве имен.
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())
Параметры
- reader
- IDataReader
Объект IDataReader, предоставляющий один или несколько наборов результатов.
- loadOption
- LoadOption
Значение из перечисления LoadOption, которое указывает, как строки, уже находящиеся в экземплярах DataTable набора данных DataSet, должны объединяться со входящими строками, имеющими общий первичный ключ.
- errorHandler
- FillErrorEventHandler
Делегат FillErrorEventHandler, вызываемый при возникновении ошибки во время загрузки данных.
- tables
- DataTable[]
Массив экземпляров DataTable, из которых метод Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[]) получает сведения об имени и пространстве имен.
Примеры
Следующий пример добавляет таблицу в DataSet, а затем пытается использовать Load метод для загрузки данных из DataTableReader , содержащего несовместимую схему. Вместо того чтобы перехватывать ошибку, в этом примере используется FillErrorEventHandler делегат для исследования и обработки ошибки. Выходные данные отображаются в окне консоли.
static void Main()
{
// Attempt to load data from a data reader in which
// the schema is incompatible with the current schema.
// If you use exception handling, you won't get the chance
// to examine each row, and each individual table,
// as the Load method progresses.
// By taking advantage of the FillErrorEventHandler delegate,
// you can interact with the Load process as an error occurs,
// attempting to fix the problem, or simply continuing or quitting
// the Load process.:
DataSet dataSet = new DataSet();
DataTable table = GetIntegerTable();
dataSet.Tables.Add(table);
DataTableReader reader = new DataTableReader(GetStringTable());
dataSet.Load(reader, LoadOption.OverwriteChanges,
FillErrorHandler, table);
Console.WriteLine("Press any key to continue.");
Console.ReadKey();
}
private static DataTable GetIntegerTable()
{
// Create sample Customers table, in order
// to demonstrate the behavior of the DataTableReader.
DataTable table = new DataTable();
// Create two columns, ID and Name.
DataColumn idColumn = table.Columns.Add("ID", typeof(int));
// Set the ID column as the primary key column.
table.PrimaryKey = new DataColumn[] { idColumn };
table.Rows.Add(new object[] { 4 });
table.Rows.Add(new object[] { 5 });
table.AcceptChanges();
return table;
}
private static DataTable GetStringTable()
{
// Create sample Customers table, in order
// to demonstrate the behavior of the DataTableReader.
DataTable table = new DataTable();
// Create two columns, ID and Name.
DataColumn idColumn = table.Columns.Add("ID", typeof(string));
// Set the ID column as the primary key column.
table.PrimaryKey = new DataColumn[] { idColumn };
table.Rows.Add(new object[] { "Mary" });
table.Rows.Add(new object[] { "Andy" });
table.Rows.Add(new object[] { "Peter" });
table.AcceptChanges();
return table;
}
static void FillErrorHandler(object sender, FillErrorEventArgs e)
{
// You can use the e.Errors value to determine exactly what
// went wrong.
if (e.Errors.GetType() == typeof(System.FormatException))
{
Console.WriteLine("Error when attempting to update the value: {0}",
e.Values[0]);
}
// Setting e.Continue to True tells the Load
// method to continue trying. Setting it to False
// indicates that an error has occurred, and the
// Load method raises the exception that got
// you here.
e.Continue = true;
}
Sub Main()
Dim dataSet As New DataSet
Dim table As New DataTable()
' Attempt to load data from a data reader in which
' the schema is incompatible with the current schema.
' If you use exception handling, you won't get the chance
' to examine each row, and each individual table,
' as the Load method progresses.
' By taking advantage of the FillErrorEventHandler delegate,
' you can interact with the Load process as an error occurs,
' attempting to fix the problem, or simply continuing or quitting
' the Load process.:
dataSet = New DataSet()
table = GetIntegerTable()
dataSet.Tables.Add(table)
Dim reader As New DataTableReader(GetStringTable())
dataSet.Load(reader, LoadOption.OverwriteChanges, _
AddressOf FillErrorHandler, table)
Console.WriteLine("Press any key to continue.")
Console.ReadKey()
End Sub
Private Sub FillErrorHandler(ByVal sender As Object, _
ByVal e As FillErrorEventArgs)
' You can use the e.Errors value to determine exactly what
' went wrong.
If e.Errors.GetType Is GetType(System.FormatException) Then
Console.WriteLine("Error when attempting to update the value: {0}", _
e.Values(0))
End If
' Setting e.Continue to True tells the Load
' method to continue trying. Setting it to False
' indicates that an error has occurred, and the
' Load method raises the exception that got
' you here.
e.Continue = True
End Sub
Private Function GetIntegerTable() As DataTable
' Create sample table with a single Int32 column.
Dim table As New DataTable
Dim idColumn As DataColumn = table.Columns.Add("ID", _
GetType(Integer))
' Set the ID column as the primary key column.
table.PrimaryKey = New DataColumn() {idColumn}
table.Rows.Add(New Object() {4})
table.Rows.Add(New Object() {5})
table.TableName = "IntegerTable"
table.AcceptChanges()
Return table
End Function
Private Function GetStringTable() As DataTable
' Create sample table with a single String column.
Dim table As New DataTable
Dim idColumn As DataColumn = table.Columns.Add("ID", _
GetType(String))
' Set the ID column as the primary key column.
table.PrimaryKey = New DataColumn() {idColumn}
table.Rows.Add(New Object() {"Mary"})
table.Rows.Add(New Object() {"Andy"})
table.Rows.Add(New Object() {"Peter"})
table.AcceptChanges()
Return table
End Function
Private Sub PrintColumns( _
ByVal table As DataTable)
' Loop through all the rows in the DataTableReader.
For Each row As DataRow In table.Rows
For Each col As DataColumn In table.Columns
Console.Write(row(col).ToString() & " ")
Next
Console.WriteLine()
Next
End Sub
Комментарии
Метод Load предоставляет метод заполнения отдельного объекта DataTable данными, полученными из экземпляра IDataReader . Этот метод предоставляет те же функции, но позволяет загружать несколько результирующих наборов из в IDataReader несколько таблиц в DataSet.
Примечание
Операция загрузки завершится ошибкой InvalidOperationException , если какой-либо из исходных столбцов данных во входящих reader
являются вычисляемых столбцами.
Параметр loadOption
позволяет указать, как импортированные данные должны взаимодействовать с существующими данными, и может быть любым из значений из перечисления LoadOption . Дополнительные сведения об использовании этого параметра см. в документации DataTableLoad по методу .
Параметр errorHandler
является делегатом FillErrorEventHandler , который ссылается на процедуру, которая вызывается при возникновении ошибки при загрузке данных. Параметр FillErrorEventArgs , передаваемый в процедуру, предоставляет свойства, позволяющие получить сведения о возникшедской ошибке, текущей строке данных и заполнении DataTable . Использование этого механизма делегата, а не простого блока try/catch, позволяет определить ошибку, обработать ситуацию и продолжить обработку, если хотите. Параметр FillErrorEventArgs предоставляет Continue свойство : задайте этому свойству значение , true
чтобы указать, что вы обработали ошибку и хотите продолжить обработку; задайте свойству значение , false
чтобы указать, что вы хотите остановить обработку. Имейте в виду, что если задать для свойства значение false
, код, который вызвал проблему, вызовет исключение.
Параметр tables
позволяет указать массив экземпляров, указывающий DataTable порядок таблиц, соответствующих каждому результирующий набор, загруженный из средства чтения. Метод Load заполняет каждый предоставленный DataTable экземпляр данными из одного результируемого набора из средства чтения исходных данных. После каждого результирующих наборов Load метод переходит к следующему результирующем набору в средстве чтения, пока не будет больше результирующих наборов.
Схема разрешения имен для этого метода аналогична схеме Fill , за которой следует метод DbDataAdapter класса .