DataSet.Load メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定された DataSet を使用し、IDataReader にデータ ソースからの値を設定します。
オーバーロード
Load(IDataReader, LoadOption, DataTable[]) |
指定した DataSet を使用するデータ ソースの値を IDataReader に格納し、DataTable インスタンスの配列を使用してスキーマ情報と名前空間情報を指定します。 |
Load(IDataReader, LoadOption, String[]) |
指定した DataSet を使用するデータ ソースの値を IDataReader に格納し、文字列の配列を使用して |
Load(IDataReader, LoadOption, FillErrorEventHandler, DataTable[]) |
指定した DataSet を使用するデータ ソースの値を IDataReader に格納し、DataTable インスタンスの配列を使用してスキーマ情報と名前空間情報を指定します。 |
注釈
メソッドは Load 、インスタンスから取得されたデータを 1 つ DataTable で埋める手法を IDataReader 提供します。 このメソッドは同じ機能を提供しますが、 から IDataReader
内の複数のテーブルに複数の結果セットを DataSet
読み込むことができます。
DataSet
が既に行を含んでいる場合、データ ソースからの受信データは既存の行にマージされます。
メソッドは Load
、指定したデータ ソースからデータを取得し、現在のデータ コンテナー (この場合は ) に追加することを中心に、いくつかの一般的な DataSet
シナリオで使用できます。 これらのシナリオでは、 の標準的な DataSet
使用方法について説明し、更新とマージの動作について説明します。
は DataSet
、単一のプライマリ データ ソースと同期または更新します。 では変更が DataSet
追跡され、プライマリ データ ソースとの同期が可能になります。 さらに、 では DataSet
、1 つ以上のセカンダリ データ ソースからの増分データを受け入れることもできます。 DataSet
は、セカンダリ データ ソースとの同期を許可するために変更を追跡する責任を負いません。
これら 2 つの架空のデータ ソースを考えると、ユーザーは次のいずれかの動作を必要とする可能性があります。
プライマリ データ ソースから初期化
DataSet
します。 このシナリオでは、ユーザーはプライマリ データ ソースの値を使用して空DataSet
の を初期化したいと考えています。 1 つ以上の DataTable の内容が変更されます。 後で、ユーザーは変更をプライマリ データ ソースに反映する予定です。変更を保持し、プライマリ データ ソースから再同期します。 このシナリオでは、ユーザーは前のシナリオで入力した を
DataSet
取得し、プライマリ データ ソースとの増分同期を実行し、 でDataSet
行われた変更を保持したいと考えています。セカンダリ データ ソースからの増分データ フィード。 このシナリオでは、ユーザーは 1 つ以上のセカンダリ データ ソースからの変更をマージし、それらの変更をプライマリ データ ソースに反映したいと考えています。
メソッドを Load
使用すると、これらすべてのシナリオが可能になります。 このメソッドを使用すると、読み込みオプション パラメーターを指定して、既に行が読み込まれている行と結合する方法を DataTable 示すことができます。 次の表では、 列挙体によって LoadOption 提供される 3 つの読み込みオプションについて説明します。 いずれの場合も、入力データの行の主キーが既存の行の主キーと一致する場合の動作が説明に示されます。
読み込みオプション | 説明 |
---|---|
PreserveChanges (既定値) |
受信行の値を使用して、元のバージョンの行をUpdatesします。 |
OverwriteChanges |
受信行の値を使用して、行の現在のバージョンと元のバージョンをUpdatesします。 |
Upsert |
受信行の値を使用して、現在のバージョンの行をUpdatesします。 |
一般に PreserveChanges
、 オプションと OverwriteChanges
オプションは、 とその変更をプライマリ データ ソースと同期 DataSet
する必要があるシナリオを対象としています。 オプションを Upsert
使用すると、1 つ以上のセカンダリ データ ソースからの変更の集計が容易になります。
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
1 つ以上の結果セットを含む IDataReader。
- loadOption
- LoadOption
LoadOption 列挙体の値。DataTable 内の DataSet インスタンスに既に含まれている行を同じ主キーを持つ受信した行と結合する方法を示します。
- tables
- DataTable[]
DataTable メソッドが名前と名前空間の情報を取得する、Load(IDataReader, LoadOption, DataTable[]) インスタンスの配列。 これらのテーブルは、この DataTableCollection に格納されている DataSet のメンバーである必要があります。
例
次の例では、新しい DataSetを作成し、 に 2 つのDataTableインスタンスをDataSet追加し、 メソッドをLoad使用して をDataSet入力し、2 つの結果セットを含む から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 、インスタンスから取得されたデータを 1 つ DataTable で埋める手法を IDataReader 提供します。 このメソッドは同じ機能を提供しますが、 から IDataReader 内の複数のテーブルに複数の結果セットを DataSet読み込むことができます。
注意
受信reader
のソース データ列のいずれかが計算列である場合、読み込み操作は で失敗InvalidOperationExceptionします。
loadOption
パラメーターを使用すると、インポートされたデータを既存のデータとやり取りする方法を指定できます。また、列挙体の任意の値をLoadOption指定できます。 このパラメーターの使用の詳細については、 DataTableLoad メソッドのドキュメントを参照してください。
tables
パラメーターを使用すると、リーダーから読み込まれた各結果セットに対応するテーブルの順序を示す、インスタンスの配列DataTableを指定できます。 メソッドは Load 、指定された各インスタンスに DataTable 、ソース データ リーダーからの 1 つの結果セットのデータを入力します。 各結果セットの後、メソッドは Load リーダー内の次の結果セットに移動し、それ以上結果セットが存在しないまで移動します。
このメソッドの名前解決スキームは、 クラスの メソッドDbDataAdapterとFill同じです。
こちらもご覧ください
適用対象
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
1 つ以上の結果セットを含む IDataReader。
- loadOption
- LoadOption
LoadOption 列挙体の値。DataTable 内の DataSet
インスタンスに既に含まれている行を同じ主キーを持つ受信した行と結合する方法を示します。
- tables
- String[]
Load
メソッドがテーブル名の情報を取得する、文字列の配列。
例
次のコンソール アプリケーションの例では、最初に テーブルを作成し、 メソッドを使用してリーダーから にデータをDataSetLoad
読み込みます。 次に、テーブルを に 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 、インスタンスから取得されたデータを 1 つ DataTable で埋める手法を IDataReader 提供します。 このメソッドは同じ機能を提供しますが、 から IDataReader
内の複数のテーブルに複数の結果セットを DataSet
読み込むことができます。
注意
受信reader
のソース データ列のいずれかが計算列である場合、読み込み操作は で失敗InvalidOperationExceptionします。
loadOption
パラメーターを使用すると、インポートされたデータを既存のデータとやり取りする方法を指定できます。また、列挙体の任意の値をLoadOption指定できます。 このパラメーターの使用の詳細については、 Load メソッドのドキュメントを参照してください。
tables
パラメーターを使用すると、リーダーから読み込まれた各結果セットに対応するテーブルの順序を示す、テーブル名の配列を指定できます。 メソッドは Load
、テーブル名の配列で DataSet
見つかった名前と一致する内のテーブルを順番に検索しようとします。 一致するテーブルが見つかった場合、そのテーブルには現在の結果セットの内容が読み込まれます。 一致するテーブルが見つからない場合は、テーブル名の配列に指定された名前を使用してテーブルが作成され、新しいテーブルのスキーマが結果セットから推論されます。 各結果セットの後、メソッドは Load
リーダー内の次の結果セットに移動し、それ以上結果セットが存在しないまで移動します。
に関連付けられている DataSet
既定の名前空間 (存在する場合) は、新しく作成 DataTable
された 各 に関連付けられます。 このメソッドの名前解決スキームは、 クラスの メソッドDbDataAdapterとFill同じです。
こちらもご覧ください
適用対象
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
1 つ以上の結果セットを含む 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 、インスタンスから取得されたデータを 1 つ DataTable で埋める手法を IDataReader 提供します。 このメソッドは同じ機能を提供しますが、 から IDataReader 内の複数のテーブルに複数の結果セットを DataSet読み込むことができます。
注意
受信reader
のソース データ列のいずれかが計算列である場合、読み込み操作は で失敗InvalidOperationExceptionします。
loadOption
パラメーターを使用すると、インポートされたデータを既存のデータとやり取りする方法を指定できます。また、列挙体の任意の値をLoadOption指定できます。 このパラメーターの使用の詳細については、 DataTableLoad メソッドのドキュメントを参照してください。
パラメーターは errorHandler
、データの FillErrorEventHandler 読み込み中にエラーが発生したときに呼び出されるプロシージャを参照するデリゲートです。 プロシージャに渡されるパラメーターには FillErrorEventArgs 、発生したエラー、現在のデータ行、および入力されている に関する情報を取得できるプロパティが DataTable 用意されています。 このデリゲート メカニズムを使用すると、より単純な try/catch ブロックではなく、エラーを特定し、状況を処理し、必要に応じて処理を続行できます。 パラメーターは FillErrorEventArgs プロパティを Continue 提供します。このプロパティを に true
設定して、エラーを処理し、処理を続行することを示します。処理を停止することを示すには、 プロパティ false
を に設定します。 プロパティを に false
設定すると、問題をトリガーしたコードで例外がスローされることに注意してください。
tables
パラメーターを使用すると、リーダーから読み込まれた各結果セットに対応するテーブルの順序を示す、インスタンスの配列DataTableを指定できます。 メソッドは Load 、指定された各インスタンスに DataTable 、ソース データ リーダーからの 1 つの結果セットのデータを入力します。 各結果セットの後、メソッドは Load リーダー内の次の結果セットに移動し、それ以上結果セットが存在しないまで移動します。
このメソッドの名前解決スキームは、 クラスの メソッドDbDataAdapterとFill同じです。
こちらもご覧ください
適用対象
.NET