英語で読む

次の方法で共有


DataSet.Load メソッド

定義

指定された DataSet を使用し、IDataReader にデータ ソースからの値を設定します。

オーバーロード

Load(IDataReader, LoadOption, DataTable[])

指定した DataSet を使用するデータ ソースの値を IDataReader に格納し、DataTable インスタンスの配列を使用してスキーマ情報と名前空間情報を指定します。

Load(IDataReader, LoadOption, String[])

指定した DataSet を使用するデータ ソースの値を IDataReader に格納し、文字列の配列を使用して DataSet 内のテーブルの名前を指定します。

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, params System.Data.DataTable[] tables);

パラメーター

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();
}

注釈

メソッドは Load 、インスタンスから取得されたデータを 1 つ DataTable で埋める手法を IDataReader 提供します。 このメソッドは同じ機能を提供しますが、 から IDataReader 内の複数のテーブルに複数の結果セットを DataSet読み込むことができます。

注意

受信readerのソース データ列のいずれかが計算列である場合、読み込み操作は で失敗InvalidOperationExceptionします。

loadOptionパラメーターを使用すると、インポートされたデータを既存のデータとやり取りする方法を指定できます。また、列挙体の任意の値をLoadOption指定できます。 このパラメーターの使用の詳細については、 DataTableLoad メソッドのドキュメントを参照してください。

tablesパラメーターを使用すると、リーダーから読み込まれた各結果セットに対応するテーブルの順序を示す、インスタンスの配列DataTableを指定できます。 メソッドは Load 、指定された各インスタンスに DataTable 、ソース データ リーダーからの 1 つの結果セットのデータを入力します。 各結果セットの後、メソッドは Load リーダー内の次の結果セットに移動し、それ以上結果セットが存在しないまで移動します。

このメソッドの名前解決スキームは、 クラスの メソッドDbDataAdapterFill同じです。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Load(IDataReader, LoadOption, String[])

ソース:
DataSet.cs
ソース:
DataSet.cs
ソース:
DataSet.cs

指定した DataSet を使用するデータ ソースの値を IDataReader に格納し、文字列の配列を使用して DataSet 内のテーブルの名前を指定します。

public void Load (System.Data.IDataReader reader, System.Data.LoadOption loadOption, params string[] tables);

パラメーター

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();
}

注釈

メソッドは Load 、インスタンスから取得されたデータを 1 つ DataTable で埋める手法を IDataReader 提供します。 このメソッドは同じ機能を提供しますが、 から IDataReader 内の複数のテーブルに複数の結果セットを DataSet読み込むことができます。

注意

受信readerのソース データ列のいずれかが計算列である場合、読み込み操作は で失敗InvalidOperationExceptionします。

loadOptionパラメーターを使用すると、インポートされたデータを既存のデータとやり取りする方法を指定できます。また、列挙体の任意の値をLoadOption指定できます。 このパラメーターの使用の詳細については、 Load メソッドのドキュメントを参照してください。

tablesパラメーターを使用すると、リーダーから読み込まれた各結果セットに対応するテーブルの順序を示す、テーブル名の配列を指定できます。 メソッドは Load 、テーブル名の配列で DataSet 見つかった名前と一致する内のテーブルを順番に検索しようとします。 一致するテーブルが見つかった場合、そのテーブルには現在の結果セットの内容が読み込まれます。 一致するテーブルが見つからない場合は、テーブル名の配列に指定された名前を使用してテーブルが作成され、新しいテーブルのスキーマが結果セットから推論されます。 各結果セットの後、メソッドは Load リーダー内の次の結果セットに移動し、それ以上結果セットが存在しないまで移動します。

に関連付けられている DataSet既定の名前空間 (存在する場合) は、新しく作成 DataTableされた 各 に関連付けられます。 このメソッドの名前解決スキームは、 クラスの メソッドDbDataAdapterFill同じです。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

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, 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);

パラメーター

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;
}

注釈

メソッドは 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 リーダー内の次の結果セットに移動し、それ以上結果セットが存在しないまで移動します。

このメソッドの名前解決スキームは、 クラスの メソッドDbDataAdapterFill同じです。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1