次の方法で共有


DbDataAdapter.FillSchema メソッド

定義

DataTableDataSet に追加し、データ ソース内のスキーマと一致するようにスキーマを設定します。

オーバーロード

FillSchema(DataSet, SchemaType, IDbCommand, String, CommandBehavior)

指定した DataTableDataSet を追加し、指定した SchemaType に基づいて、データ ソース内のスキーマと一致するようにスキーマを設定します。

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

指定した DataTable、コマンド文字列、および SchemaType 値に基づいて、指定した CommandBehavior のスキーマを設定します。

FillSchema(DataSet, SchemaType, String)

指定した DataSetDataTable を追加し、指定した SchemaType および DataTable に基づいて、データ ソースにあるスキーマと一致するようにスキーマを構成します。

FillSchema(DataTable, SchemaType)

指定された SchemaType に基づいて、指定された DataTable のスキーマを構成します。

FillSchema(DataSet, SchemaType)

"Table" という名前の DataTable を指定された DataSet に追加し、指定された SchemaType に基づいて、データ ソースにあるスキーマと一致するようにスキーマを構成します。

FillSchema(DataSet, SchemaType, IDbCommand, String, CommandBehavior)

ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs

指定した DataTableDataSet を追加し、指定した SchemaType に基づいて、データ ソース内のスキーマと一致するようにスキーマを設定します。

protected:
 virtual cli::array <System::Data::DataTable ^> ^ FillSchema(System::Data::DataSet ^ dataSet, System::Data::SchemaType schemaType, System::Data::IDbCommand ^ command, System::String ^ srcTable, System::Data::CommandBehavior behavior);
protected virtual System.Data.DataTable[] FillSchema (System.Data.DataSet dataSet, System.Data.SchemaType schemaType, System.Data.IDbCommand command, string srcTable, System.Data.CommandBehavior behavior);
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType * System.Data.IDbCommand * string * System.Data.CommandBehavior -> System.Data.DataTable[]
Protected Overridable Function FillSchema (dataSet As DataSet, schemaType As SchemaType, command As IDbCommand, srcTable As String, behavior As CommandBehavior) As DataTable()

パラメーター

dataSet
DataSet

データ ソースからのスキーマを格納する DataSet

schemaType
SchemaType

SchemaType 値のいずれか 1 つ。

command
IDbCommand

データ ソースから行を取得するために使用する SQL SELECT ステートメント。

srcTable
String

テーブル マップに使用するソース テーブルの名前。

behavior
CommandBehavior

CommandBehavior 値のいずれか 1 つ。

戻り値

データ ソースから返されたスキーマ情報が格納された、DataTable オブジェクトの配列。

注釈

メソッドは FillSchema 、 を使用してデータ ソースからスキーマを取得します SelectCommand。 に SelectCommand 関連付けられている接続オブジェクトは有効である必要がありますが、開く必要はありません。 が呼び出される前に FillSchema 接続が閉じられている場合は、データを取得するために接続が開き、閉じられます。 が呼び出される前に FillSchema 接続が開いている場合は、開いたままです。

操作は FillSchema 、コピー先 に を追加 DataTable します DataSet。 次に、 の に列をDataColumnCollectionDataTable追加し、データ ソースに存在する場合は次DataColumnのプロパティを構成します。

FillSchemaでは、 プロパティと Constraints プロパティも次の規則に従って構成PrimaryKeyされます。

  • によって SelectCommand1 つ以上の主キー列が返される場合は、 の主キー列 DataTableとして使用されます。

  • 主キー列が返されないが、一意の列が返される場合、一意の列は、すべての一意の列が null 非許容の場合にのみ主キーとして使用されます。 いずれかの列が null 許容の場合、 UniqueConstraint は に ConstraintCollection追加されますが、 PrimaryKey プロパティは設定されません。

  • 主キー列と一意の列の両方が返される場合は、 の主キー列として主キー列が DataTable使用されます。

主キーと一意の制約は、上記の規則に従って に ConstraintCollection 追加されますが、他の制約の種類は追加されないことに注意してください。

一意のクラスター化インデックスがSQL Server テーブル内の列に定義され、主キー制約が別の列セットで定義されている場合は、クラスター化インデックス内の列の名前が返されます。 主キー列の名前または名前を返すには、主キー インデックスの名前を指定する SELECT ステートメントでクエリ ヒントを使用します。 クエリ ヒントの指定の詳細については、「 ヒント (Transact-SQL) - クエリ」を参照してください。

の設定DataTable中にIDataAdapter重複する列が検出された場合は、パターン "columnname1"、"columnname2"、"columnname 3" などを使用して、後続の列の名前が生成されます。 受信データに名前のない列が含まれている場合は、"Column1"、"Column2" などのパターンに従って に配置 DataSet されます。 複数の結果セットが各結果セットに DataSet 追加されると、個別のテーブルに配置されます。 追加の結果セットの名前は、指定したテーブル名 (たとえば、"Table"、"Table1"、"Table2"など) に整数値を追加することによって行われます。 アプリで列名とテーブル名が使用されている場合は、これらの名前付けパターンと競合がないことを確認します。

メソッドはFillSchema、 に複数DataTableのオブジェクトがDataSet含まれているシナリオをサポートしています。このオブジェクトの名前は大文字と小文字のみが異なります。 このような状況では、 FillSchema は大文字と小文字を区別して対応するテーブルを検索し、完全一致が存在しない場合は新しいテーブルを作成します。 次の C# コードは、この動作を示しています。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
dataset.Tables.Add("AAA");  
adapter.FillSchema(dataset, "aaa"); // Fills the schema of "aaa", which already exists in the DataSet.  
adapter.FillSchema(dataset, "Aaa"); // Adds a new table called "Aaa".  

が呼び出され、 にDataSet大文字と小文字のみがDataTable異なる名前が含まれている場合FillSchemaは、更新DataTableされます。 このシナリオでは、比較では大文字と小文字が区別されません。 次の C# コードは、この動作を示しています。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
adapter.FillSchema(dataset, "AAA"); // Fills the schema of table "aaa" because only one similarly named table is in the DataSet.  

FillSchema は行を返しません。 メソッドを Fill 使用して、 に行を DataTable追加します。

注意

複数の結果を返すバッチ SQL ステートメントを処理する場合、.NET Framework Data Provider for OLE DB の の実装FillSchemaでは、最初の結果のみのスキーマ情報が取得されます。 複数の結果のスキーマ情報を取得するには、 を に設定して AddWithKeyMissingSchemaAction使用Fillします。

FillSchema を使用する場合、.NET Framework SQL Server 用データ プロバイダーは、実行するステートメントに FOR BROWSE 句を追加します。 SET FMTONLY ON ステートメントの使用による干渉などの副作用に注意してください。 詳細については、「SET FMTONLY (Transact-SQL)」をご覧ください。

注意 (継承者)

メソッドのFillSchema(DataSet, SchemaType)この実装は保護されており、.NET Framework データ プロバイダーによって使用されるように設計されています。

こちらもご覧ください

適用対象

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs

指定した DataTable、コマンド文字列、および SchemaType 値に基づいて、指定した CommandBehavior のスキーマを設定します。

protected:
 virtual System::Data::DataTable ^ FillSchema(System::Data::DataTable ^ dataTable, System::Data::SchemaType schemaType, System::Data::IDbCommand ^ command, System::Data::CommandBehavior behavior);
protected virtual System.Data.DataTable? FillSchema (System.Data.DataTable dataTable, System.Data.SchemaType schemaType, System.Data.IDbCommand command, System.Data.CommandBehavior behavior);
protected virtual System.Data.DataTable FillSchema (System.Data.DataTable dataTable, System.Data.SchemaType schemaType, System.Data.IDbCommand command, System.Data.CommandBehavior behavior);
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType * System.Data.IDbCommand * System.Data.CommandBehavior -> System.Data.DataTable
Protected Overridable Function FillSchema (dataTable As DataTable, schemaType As SchemaType, command As IDbCommand, behavior As CommandBehavior) As DataTable

パラメーター

dataTable
DataTable

データ ソースからのスキーマを格納する DataTable

schemaType
SchemaType

SchemaType 値のいずれか 1 つ。

command
IDbCommand

データ ソースから行を取得するために使用する SQL SELECT ステートメント。

behavior
CommandBehavior

CommandBehavior 値のいずれか 1 つ。

戻り値

データ ソースから返されたスキーマ情報が格納された DataTable オブジェクト。

注釈

メソッドは FillSchema 、 を使用してデータ ソースからスキーマを取得します SelectCommand。 に SelectCommand 関連付けられている接続オブジェクトは有効である必要がありますが、開く必要はありません。 が呼び出される前に FillSchema 接続が閉じられている場合は、データを取得するために接続が開き、閉じられます。 が呼び出される前に FillSchema 接続が開いている場合は、開いたままです。

操作は FillSchema 、コピー先 に を追加 DataTable します DataSet。 次に、 の に列をDataColumnCollectionDataTable追加し、データ ソースに存在する場合は次DataColumnのプロパティを構成します。

FillSchemaでは、 プロパティと Constraints プロパティも次の規則に従って構成PrimaryKeyされます。

  • によって SelectCommand1 つ以上の主キー列が返される場合は、 の主キー列 DataTableとして使用されます。

  • 主キー列が返されないが、一意の列が返される場合、一意の列は、すべての一意の列が null 非許容の場合にのみ主キーとして使用されます。 いずれかの列が null 許容の場合、 UniqueConstraint は に ConstraintCollection追加されますが、 PrimaryKey プロパティは設定されません。

  • 主キー列と一意の列の両方が返される場合は、 の主キー列として主キー列が DataTable使用されます。

主キーと一意の制約は、上記の規則に従って に ConstraintCollection 追加されますが、他の制約の種類は追加されないことに注意してください。

一意のクラスター化インデックスがSQL Server テーブル内の列に定義され、主キー制約が別の列セットで定義されている場合は、クラスター化インデックス内の列の名前が返されます。 主キー列の名前または名前を返すには、主キー インデックスの名前を指定する SELECT ステートメントでクエリ ヒントを使用します。 クエリ ヒントの指定の詳細については、「 ヒント (Transact-SQL) - クエリ」を参照してください。

の設定DataTable中にIDataAdapter重複する列が検出された場合は、パターン "columnname1"、"columnname2"、"columnname 3" などを使用して、後続の列の名前が生成されます。 受信データに名前のない列が含まれている場合は、"Column1"、"Column2" などのパターンに従って に配置 DataSet されます。 複数の結果セットが各結果セットに DataSet 追加されると、個別のテーブルに配置されます。 追加の結果セットの名前は、指定したテーブル名 (たとえば、"Table"、"Table1"、"Table2"など) に整数値を追加することによって行われます。 アプリで列名とテーブル名が使用されている場合は、これらの名前付けパターンと競合がないことを確認します。

FillSchema は行を返しません。 メソッドを Fill 使用して、 に行を DataTable追加します。

注意

複数の結果を返すバッチ SQL ステートメントを処理する場合、.NET Framework Data Provider for OLE DB の の実装FillSchemaでは、最初の結果のみのスキーマ情報が取得されます。 複数の結果のスキーマ情報を取得するには、 を に設定して AddWithKeyMissingSchemaAction使用Fillします。

FillSchema を使用する場合、.NET Framework SQL Server 用データ プロバイダーは、実行するステートメントに FOR BROWSE 句を追加します。 SET FMTONLY ON ステートメントの使用による干渉などの副作用に注意してください。 詳細については、「SET FMTONLY (Transact-SQL)」をご覧ください。

注意 (継承者)

メソッドのFillSchema(DataSet, SchemaType)この実装は保護されており、.NET Framework データ プロバイダーによって使用されるように設計されています。

こちらもご覧ください

適用対象

FillSchema(DataSet, SchemaType, String)

ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs

指定した DataSetDataTable を追加し、指定した SchemaType および DataTable に基づいて、データ ソースにあるスキーマと一致するようにスキーマを構成します。

public:
 cli::array <System::Data::DataTable ^> ^ FillSchema(System::Data::DataSet ^ dataSet, System::Data::SchemaType schemaType, System::String ^ srcTable);
public System.Data.DataTable[] FillSchema (System.Data.DataSet dataSet, System.Data.SchemaType schemaType, string srcTable);
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType * string -> System.Data.DataTable[]
Public Function FillSchema (dataSet As DataSet, schemaType As SchemaType, srcTable As String) As DataTable()

パラメーター

dataSet
DataSet

スキーマの挿入先の DataSet

schemaType
SchemaType

スキーマを挿入する方法を指定する SchemaType 値の 1 つ。

srcTable
String

テーブル マップに使用するソース テーブルの名前。

戻り値

DataSet に追加された DataTable オブジェクトのコレクションへの参照。

例外

スキーマの取得元のソース テーブルが見つかりません。

次の例では、 SqlDataAdapter派生クラス を使用して スキーマを DataSet 入力し、 を返します DataSet

public static DataSet GetCustomerData(string dataSetName,
    string connectionString)
{
    DataSet dataSet = new DataSet(dataSetName);

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(
            "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);

        DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
        mapping.ColumnMappings.Add("CompanyName", "Name");
        mapping.ColumnMappings.Add("ContactName", "Contact");

        connection.Open();

        adapter.FillSchema(dataSet, SchemaType.Source, "Customers");
        adapter.Fill(dataSet);

        return dataSet;
    }
}
Private Function GetCustomerData(ByVal dataSetName As String, _
    ByVal connectionString As String) As DataSet

    Dim dataSet As New DataSet(dataSetName)

    Using connection As SqlConnection = New SqlConnection(connectionString)

        Dim adapter As New SqlDataAdapter( _
           "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", _
           connection)

        Dim mapping As DataTableMapping = adapter.TableMappings.Add( _
           "Table", "Customers")
        mapping.ColumnMappings.Add("CompanyName", "Name")
        mapping.ColumnMappings.Add("ContactName", "Contact")

        connection.Open()

        adapter.FillSchema(dataSet, SchemaType.Source, "Customers")
        adapter.Fill(dataSet)
        Return dataSet
    End Using
End Function

注釈

このメソッドは、 を使用してデータ ソースからスキーマ情報を取得します SelectCommand

操作によって FillSchema 、 が DataTable 宛先 に追加されます DataSet。 次に、 の DataTableに列をDataColumnCollection追加し、データ ソースに存在する場合は次DataColumnのプロパティを構成します。

FillSchema また、次の PrimaryKey 規則に従って および Constraints プロパティを構成します。

  • によって SelectCommand1 つ以上の主キー列が返される場合は、 の DataTable主キー列として使用されます。

  • 主キー列が返されないが、一意の列が返されない場合、一意の列は、すべての一意の列が null 不可能な場合にのみ、主キーとして使用されます。 いずれかの列が null 許容の場合、 UniqueConstraint は に ConstraintCollection追加されますが、 PrimaryKey プロパティは設定されていません。

  • 主キー列と一意の列の両方が返される場合、主キー列は の DataTable主キー列として使用されます。

主キーと一意の制約は、上記の ConstraintCollection 規則に従って に追加されますが、他の制約の種類は追加されないことに注意してください。

一意のクラスター化インデックスがSQL Serverテーブル内の列に定義されていて、主キー制約が別の列セットに定義されている場合は、クラスター化インデックス内の列の名前が返されます。 主キー列の名前または名前を返すには、主キー インデックスの名前を指定する SELECT ステートメントでクエリ ヒントを使用します。 クエリ ヒントの指定の詳細については、「 ヒント (Transact-SQL) - クエリ」を参照してください。

主キー情報は、キー列が一致する行を検索して置き換えるために、 の間に Fill 使用されます。 これが目的の動作でない場合は、スキーマ情報を要求せずに を使用 Fill します。

の設定DataTable中に重複する列が検出された場合は、"columnname 1"、"columnname2"、"columnname3" などのパターンを使用して、後続の列の名前が生成されます。DbDataAdapter 受信データに名前のない列が含まれている場合は、"Column1"、"Column2" などのパターンに従って に配置 DataSet されます。 複数の結果セットが各結果セットに DataSet 追加されると、別のテーブルに配置されます。 追加の結果セットの名前は、指定したテーブル名 ("Table"、"Table1"、"Table2" など) に整数値を追加することによって指定されます。 アプリで列名とテーブル名が使用されている場合は、これらの名前付けパターンと競合がないことを確認します。

メソッドはFillSchema、 に複数DataTableのオブジェクトがDataSet含まれているシナリオをサポートしています。このオブジェクトの名前は大文字と小文字のみが異なります。 このような状況では、 FillSchema 大文字と小文字を区別して対応するテーブルを検索し、完全一致が存在しない場合は新しいテーブルを作成します。 次の C# コードは、この動作を示しています。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
dataset.Tables.Add("AAA");  
adapter.FillSchema(dataset, "aaa"); // Fills the schema of "aaa", which already exists in the DataSet.  
adapter.FillSchema(dataset, "Aaa"); // Adds a new table called "Aaa".  

が呼び出され、 にDataSet大文字と小文字のみがDataTable異なる名前が含まれている場合FillSchemaは、更新DataTableされます。 このシナリオでは、比較では大文字と小文字が区別されません。 次の C# コードは、この動作を示しています。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
adapter.FillSchema(dataset, "AAA"); // Fills the schema of table "aaa" because only one similarly named table is in the DataSet.  

select コマンドに関連付けられているオブジェクトは IDbConnection 有効である必要がありますが、開く必要はありません。 IDbConnectionが呼び出される前に FillSchema が閉じられると、データを取得するためにが開き、その後閉じられます。 が呼び出される前に FillSchema 接続が開いている場合は、開いたままになります。

注意

複数の結果を返すバッチ SQL ステートメントを処理する場合、.NET Framework Data Provider for OLE DB の の実装FillSchemaでは、最初の結果のみのスキーマ情報が取得されます。 複数の結果のスキーマ情報を取得するには、 を に設定して AddWithKeyMissingSchemaAction使用Fillします。

FillSchema を使用する場合、.NET Framework SQL Server 用データ プロバイダーは、実行するステートメントに FOR BROWSE 句を追加します。 SET FMTONLY ON ステートメントの使用による干渉などの副作用に注意してください。 詳細については、「SET FMTONLY (Transact-SQL)」をご覧ください。

こちらもご覧ください

適用対象

FillSchema(DataTable, SchemaType)

ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs

指定された SchemaType に基づいて、指定された DataTable のスキーマを構成します。

public:
 System::Data::DataTable ^ FillSchema(System::Data::DataTable ^ dataTable, System::Data::SchemaType schemaType);
public System.Data.DataTable? FillSchema (System.Data.DataTable dataTable, System.Data.SchemaType schemaType);
public System.Data.DataTable FillSchema (System.Data.DataTable dataTable, System.Data.SchemaType schemaType);
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType -> System.Data.DataTable
Public Function FillSchema (dataTable As DataTable, schemaType As SchemaType) As DataTable

パラメーター

dataTable
DataTable

データ ソースからのスキーマを格納する DataTable

schemaType
SchemaType

SchemaType 値のいずれか 1 つ。

戻り値

データ ソースから返されたスキーマ情報を含む DataTable

次の例では、 SqlDataAdapter派生クラス を使用して スキーマを DataSet 入力し、 を返します DataTable

public static DataTable GetCustomerData(string dataSetName,
    string connectionString)
{
    DataTable table = new DataTable(dataSetName);

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(
            "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);

        DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
        mapping.ColumnMappings.Add("CompanyName", "Name");
        mapping.ColumnMappings.Add("ContactName", "Contact");

        connection.Open();

        adapter.FillSchema(table, SchemaType.Mapped);
        adapter.Fill(table);
        return table;
    }
}
Private Function GetCustomerData(ByVal dataTableName As String, _
    ByVal connectionString As String) As DataTable

    Dim table As New DataTable(dataTableName)

    Using connection As SqlConnection = New SqlConnection(connectionString)

        Dim adapter New SqlDataAdapter( _
           "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", _
           connection)

        Dim mapping As DataTableMapping = adapter.TableMappings.Add( _
           "Table", "Customers")
        mapping.ColumnMappings.Add("CompanyName", "Name")
        mapping.ColumnMappings.Add("ContactName", "Contact")

        connection.Open()

        adapter.FillSchema(table, SchemaType.Mapped)
        adapter.Fill(table)
        Return table
    End Using
End Function

注釈

メソッドは FillSchema 、 を使用してデータ ソースからスキーマを取得します SelectCommand。 に SelectCommand 関連付けられている接続オブジェクトは有効である必要がありますが、開いている必要はありません。 が呼び出される前に FillSchema 接続が閉じられている場合は、データを取得するために開かれた後、閉じられます。 が呼び出される前に FillSchema 接続が開いている場合は、開いたままです。

操作は FillSchemaDataTable返します。 次に、 の DataTableに列をDataColumnCollection追加し、データ ソースに存在する場合は次DataColumnのプロパティを構成します。

FillSchema また、次の PrimaryKey 規則に従って および Constraints プロパティを構成します。

  • PrimaryKeyに対して が既にDataTable定義されている場合、または にデータがDataTable含まれている場合、 PrimaryKey プロパティは設定されません。

  • によって SelectCommand1 つ以上の主キー列が返される場合は、 の DataTable主キー列として使用されます。

  • 主キー列が返されないが、一意の列が返されない場合、一意の列は、すべての一意の列が null 不可能な場合にのみ、主キーとして使用されます。 いずれかの列が null 許容の場合、 UniqueConstraint は に ConstraintCollection追加されますが、 PrimaryKey プロパティは設定されていません。

  • 主キー列と一意の列の両方が返される場合、主キー列は の DataTable主キー列として使用されます。

主キーと一意の制約は、上記の ConstraintCollection 規則に従って に追加されますが、他の制約の種類は追加されないことに注意してください。 このプロセスでは、サーバーへのいくつかのラウンド トリップが必要になる場合があります。

一意のクラスター化インデックスがSQL Serverテーブル内の列に定義されていて、主キー制約が別の列セットに定義されている場合は、クラスター化インデックス内の列の名前が返されます。 主キー列の名前または名前を返すには、主キー インデックスの名前を指定する SELECT ステートメントでクエリ ヒントを使用します。 クエリ ヒントの指定の詳細については、「 ヒント (Transact-SQL) - クエリ」を参照してください。

の設定DataTable中に重複する列が検出された場合は、"columnname 1"、"columnname2"、"columnname3" などのパターンを使用して、後続の列の名前が生成されます。DbDataAdapter 受信データに名前のない列が含まれている場合は、"Column1"、"Column2" などのパターンに従って に配置 DataSet されます。 複数の結果セットが各結果セットに DataSet 追加されると、別のテーブルに配置されます。 追加の結果セットの名前は、指定したテーブル名 ("Table"、"Table1"、"Table2" など) に整数値を追加することによって指定されます。 アプリで列名とテーブル名が使用されている場合は、これらの名前付けパターンと競合がないことを確認します。

FillSchema は行を返しません。 メソッドを Fill 使用して、 に行を DataTable追加します。

注意

複数の結果を返すバッチ SQL ステートメントを処理する場合、.NET Framework Data Provider for OLE DB の の実装FillSchemaでは、最初の結果のみのスキーマ情報が取得されます。 複数の結果のスキーマ情報を取得するには、 を に設定して AddWithKeyMissingSchemaAction使用Fillします。

FillSchema を使用する場合、.NET Framework SQL Server 用データ プロバイダーは、実行するステートメントに FOR BROWSE 句を追加します。 SET FMTONLY ON ステートメントの使用による干渉などの副作用に注意してください。 詳細については、「SET FMTONLY (Transact-SQL)」をご覧ください。

こちらもご覧ください

適用対象

FillSchema(DataSet, SchemaType)

ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs

"Table" という名前の DataTable を指定された DataSet に追加し、指定された SchemaType に基づいて、データ ソースにあるスキーマと一致するようにスキーマを構成します。

public:
 override cli::array <System::Data::DataTable ^> ^ FillSchema(System::Data::DataSet ^ dataSet, System::Data::SchemaType schemaType);
public override System.Data.DataTable[] FillSchema (System.Data.DataSet dataSet, System.Data.SchemaType schemaType);
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType -> System.Data.DataTable[]
Public Overrides Function FillSchema (dataSet As DataSet, schemaType As SchemaType) As DataTable()

パラメーター

dataSet
DataSet

スキーマの挿入先の DataSet

schemaType
SchemaType

スキーマを挿入する方法を指定する SchemaType 値の 1 つ。

戻り値

DataSet に追加された DataTable オブジェクトのコレクションへの参照。

実装

次の例では、 SqlDataAdapter派生クラス を使用して スキーマを DataSet 入力し、 を返します DataSet

public static DataSet GetCustomerData(string dataSetName,
    string connectionString)
{
    DataSet dataSet = new DataSet(dataSetName);

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(
            "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);

        DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
        mapping.ColumnMappings.Add("CompanyName", "Name");
        mapping.ColumnMappings.Add("ContactName", "Contact");

        connection.Open();

        adapter.FillSchema(dataSet, SchemaType.Mapped);
        adapter.Fill(dataSet);

        return dataSet;
    }
}
Private Function GetCustomerData(ByVal dataSetName As String, _
    ByVal connectionString As String) As DataSet

    Dim dataSet As New DataSet(dataSetName)

    Using connection As SqlConnection = New SqlConnection(connectionString)
        Dim adapter As New SqlDataAdapter( _
           "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", _
           connection)

        Dim mapping As DataTableMapping = adapter.TableMappings.Add( _
           "Table", "Customers")
        mapping.ColumnMappings.Add("CompanyName", "Name")
        mapping.ColumnMappings.Add("ContactName", "Contact")

        connection.Open()

        adapter.FillSchema(dataSet, SchemaType.Mapped)
        adapter.Fill(dataSet)
        Return dataSet
    End Using
End Function

注釈

このメソッドは、 を使用してデータ ソースからスキーマ情報を取得します SelectCommand

操作によって FillSchema 、 が DataTable 宛先 に追加されます DataSet。 次に、 の DataTableに列をDataColumnCollection追加し、データ ソースに存在する場合は次DataColumnのプロパティを構成します。

FillSchema また、次の PrimaryKey 規則に従って および Constraints プロパティを構成します。

  • によって SelectCommand1 つ以上の主キー列が返される場合は、 の DataTable主キー列として使用されます。

  • 主キー列が返されないが、一意の列が返されない場合、一意の列は、すべての一意の列が null 不可能な場合にのみ、主キーとして使用されます。 いずれかの列が null 許容の場合、 UniqueConstraint は に ConstraintCollection追加されますが、 PrimaryKey プロパティは設定されていません。

  • 主キー列と一意の列の両方が返される場合、主キー列は の DataTable主キー列として使用されます。

主キーと一意の制約は、上記の ConstraintCollection 規則に従って に追加されますが、他の制約の種類は追加されないことに注意してください。

一意のクラスター化インデックスがSQL Serverテーブル内の列に定義されていて、主キー制約が別の列セットに定義されている場合は、クラスター化インデックス内の列の名前が返されます。 主キー列の名前または名前を返すには、主キー インデックスの名前を指定する SELECT ステートメントでクエリ ヒントを使用します。 クエリ ヒントの指定の詳細については、「 ヒント (Transact-SQL) - クエリ」を参照してください。

主キー情報は、キー列が一致する行を検索して置き換えるために、 の間に Fill 使用されます。 これが目的の動作でない場合は、スキーマ情報を要求せずに を使用 Fill します。

の設定DataTable中に重複する列が検出された場合は、"columnname 1"、"columnname2"、"columnname3" などのパターンを使用して、後続の列の名前が生成されます。IDataAdapter 受信データに名前のない列が含まれている場合は、"Column1"、"Column2" などのパターンに従って に配置 DataSet されます。 複数の結果セットが各結果セットに DataSet 追加されると、別のテーブルに配置されます。 追加の結果セットの名前は、指定したテーブル名 ("Table"、"Table1"、"Table2" など) に整数値を追加することによって指定されます。 アプリで列名とテーブル名が使用されている場合は、これらの名前付けパターンと競合がないことを確認します。

select コマンドに関連付けられているオブジェクトは IDbConnection 有効である必要がありますが、開く必要はありません。 IDbConnectionが呼び出される前に FillSchema が閉じている場合は、データを取得するために が開き、閉じられます。 が呼び出される前に FillSchema 接続が開いている場合は、開いたままです。

注意

複数の結果を返すバッチ SQL ステートメントを処理する場合、.NET Framework Data Provider for OLE DB の の実装FillSchemaでは、最初の結果のみのスキーマ情報が取得されます。 複数の結果のスキーマ情報を取得するには、 を に設定して AddWithKeyMissingSchemaAction使用Fillします。

FillSchema を使用する場合、.NET Framework SQL Server 用データ プロバイダーは、実行するステートメントに FOR BROWSE 句を追加します。 SET FMTONLY ON ステートメントの使用による干渉などの副作用に注意してください。 詳細については、「SET FMTONLY (Transact-SQL)」をご覧ください。

こちらもご覧ください

適用対象