次の方法で共有


DbDataAdapter.FillSchema メソッド (DataSet, SchemaType)

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

Overrides Overloads Public Function FillSchema( _
   ByVal dataSet As DataSet, _   ByVal schemaType As SchemaType _) As DataTable() Implements IDataAdapter.FillSchema
[C#]
public override DataTable[] FillSchema(DataSetdataSet,SchemaTypeschemaType);
[C++]
public: DataTable* FillSchema(DataSet* dataSet,SchemaTypeschemaType) [];
[JScript]
public override function FillSchema(
   dataSet : DataSet,schemaType : SchemaType) : DataTable[];

パラメータ

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

戻り値

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

実装

IDataAdapter.FillSchema

解説

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

FillSchema は、指定された DataSetDataTable を追加します。次に、 DataTableDataColumnCollection に列を追加します。データ ソースに次の DataColumn プロパティが存在する場合は、それを設定します。

また、 FillSchema は、次の規則に従って、 PrimaryKey プロパティと Constraints プロパティも設定します。

  • SelectCommand によって 1 つ以上の主キー列が返された場合は、それを DataTable の主キー列として使用します。
  • 主キー列が返されず、一意の列が返された場合、それらの列すべてが null 値を許容しないときに限り、一意の列を主キーとして使用します。いずれかの列が null 値を許容するときは、 ConstraintCollectionUniqueConstraint を追加します。 PrimaryKey プロパティは設定しません。
  • 主キー列と一意の列の両方が返された場合は、主キー列を DataTable の主キー列として使用します。

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

主キー情報は、 Fill の実行時に、キー列が一致する行を検索および置換するために使用されます。この動作が不要な場合は、スキーマ情報を要求せずに Fill を使用してください。

DataTable へのデータの格納中に重複する列が見つかった場合、2 番目以降の列に対しては、 IDataAdapter によって columnname1、columnname2、columnname3 のような形式の名前が生成されます。受信したデータに無名の列が含まれていた場合は、Column1、Column2 のような形式の名前で DataSet に列が格納されます。 DataSet に複数結果セットを追加するときは、各結果セットが個別のテーブルに格納されます。2 番目以降の結果セットには、指定されたテーブル名に整数値を追加した名前が付けられます。たとえば、Table、Table1、Table2 のようになります。アプリケーションで列名およびテーブル名を使用するときは、これらの形式の名前と衝突しないように注意する必要があります。

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

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

FillSchema を使用する場合、.NET Framework Data Provider for SQL Server は、実行するステートメントに FOR BROWSE 句を追加します。SET FMTONLY ON ステートメントの使用による干渉などの副作用に注意してください。詳細については、SQL Server Books Online を参照してください。

使用例

[Visual Basic, C#, C++] SqlDataAdapter 派生クラスを使用して、 DataSet にスキーマを格納し、 DataTable オブジェクトの配列にデータを格納してから、 SqlParameterCollection コレクションを IDataParameter オブジェクトの配列に戻す例を次に示します。この例では、 SqlDataAdapter および DataSet が作成されていることを前提にしています。

 
Public Shared Function GetCustomerData(dataSetName As String) As DataSet

  Dim ds As DataSet = New DataSet(dataSetName)

  Dim conn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind")

  Dim da As SqlDataAdapter = New SqlDataAdapter("SELECT CustomerID, CompanyName, ContactName FROM Customers", conn) 

  Dim tm As DataTableMapping = da.TableMappings.Add("Table", "Customers")
  tm.ColumnMappings.Add("CompanyName", "Name")
  tm.ColumnMappings.Add("ContactName", "Contact")

  conn.Open()

  da.FillSchema(ds, SchemaType.Mapped)

  da.Fill(ds)

  conn.Close()

  Return ds
End Function

[C#] 
public static DataSet GetCustomerData(string dataSetName)
{
  DataSet ds = new DataSet(dataSetName);

  SqlConnection conn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind");

  SqlDataAdapter da = new SqlDataAdapter("SELECT CustomerID, CompanyName, ContactName FROM Customers", conn); 

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

  conn.Open();

  da.FillSchema(ds, SchemaType.Mapped);

  da.Fill(ds);

  conn.Close();

  return ds;
}

[C++] 
public:
  static DataSet* GetCustomerData(String* dataSetName)
  {
    DataSet* ds = new DataSet(dataSetName);

    SqlConnection* conn = new SqlConnection(S"Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind");

    SqlDataAdapter* da = new SqlDataAdapter(S"SELECT CustomerID, CompanyName, ContactName FROM Customers", conn); 

    DataTableMapping* tm = da->TableMappings->Add(S"Table", S"Customers");
    tm->ColumnMappings->Add(S"CompanyName", S"Name");
    tm->ColumnMappings->Add(S"ContactName", S"Contact");

    conn->Open();

    da->FillSchema(ds, SchemaType::Mapped);

    da->Fill(ds);

    conn->Close();

    return ds;
  }

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

参照

DbDataAdapter クラス | DbDataAdapter メンバ | System.Data.Common 名前空間 | DbDataAdapter.FillSchema オーバーロードの一覧