DataTableReader.GetSchemaTable メソッド

定義

DataTable の列メタデータを記述する DataTableReader を返します。

public:
 override System::Data::DataTable ^ GetSchemaTable();
public override System.Data.DataTable GetSchemaTable ();
override this.GetSchemaTable : unit -> System.Data.DataTable
Public Overrides Function GetSchemaTable () As DataTable

戻り値

DataTable

列メタデータを記述する DataTable

例外

DataTableReader が閉じています。

次のコンソール アプリケーションの例では、指定した列に関するスキーマ情報を取得します。 プロシージャ内の列DataTableReaderDisplaySchemaTableInfo序数位置を表すプロシージャ a DataTableReader と整数を渡し、プロシージャはスキーマ情報をコンソール ウィンドウに出力します。

private static void TestGetSchemaTable()
{
    // Set up the data adapter, using information from
    // the AdventureWorks sample database.
    // Modify the SQL expression to retrieve
    // data from a different table.
    SqlDataAdapter adapter =
        SetupDataAdapter("SELECT * FROM Sales.Customer");

    // Fill the DataTable, retrieving all the schema information.
    adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    DataTable table = new DataTable();
    adapter.Fill(table);

    // Create the DataTableReader, and close it when done.
    using (DataTableReader reader = new DataTableReader(table))
    {
        // Modify the column number to display information
        // about a column other than column 0.
        DisplaySchemaTableInfo(reader, 0);
    }

    Console.WriteLine();
    Console.WriteLine("Press Enter to finish.");
    Console.ReadLine();
}

private static void DisplaySchemaTableInfo(
        DataTableReader reader, int ordinal)
{
    // Given a DataTableReader, display schema
    // information about a particular column.
    try
    {
        DataTable schemaTable = reader.GetSchemaTable();
        DataRow row = schemaTable.Rows[ordinal];
        foreach (DataColumn col in schemaTable.Columns)
        {
            Console.WriteLine("{0}: {1}",
                col.ColumnName, row[col.Ordinal]);
        }
    }
    catch (IndexOutOfRangeException ex)
    {
        Console.WriteLine("{0} is an invalid column number.",
            ordinal);
    }
}

private static SqlDataAdapter SetupDataAdapter(String sqlString)
{
    // Assuming all the default settings, create a
    // SqlDataAdapter working with the AdventureWorks
    // sample database that's available with
    // SQL Server.
    String connectionString =
        "Data source=(local);initial catalog=AdventureWorks;" +
        "Integrated Security=True";
    return new SqlDataAdapter(sqlString, connectionString);
}
Private Sub TestGetSchemaTable()
   ' Set up the data adapter, using information from 
   ' the AdventureWorks sample database.
   ' Modify the SQL expression to retrieve 
   ' data from a different table.
   Dim adapter As SqlDataAdapter = _
      SetupDataAdapter("SELECT * FROM Sales.Customer")

   ' Fill the DataTable, retrieving all the schema information.
   adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
   Dim table As New DataTable
   adapter.Fill(table)

   ' Create the DataTableReader, and close it when done.
   Using reader As New DataTableReader(table)
      ' Modify the column number to display information
      ' about a column other than column 0.
      DisplaySchemaTableInfo(reader, 0)
   End Using

   Console.WriteLine()
   Console.WriteLine("Press Enter to finish.")
   Console.ReadLine()
End Sub

Private Sub DisplaySchemaTableInfo( _
   ByVal reader As DataTableReader, ByVal ordinal As Integer)

   ' Given a DataTableReader, display schema
   ' information about a particular column.
   Try
      Dim schemaTable As DataTable = reader.GetSchemaTable()
      Dim row As DataRow = schemaTable.Rows(ordinal)
      For Each col As DataColumn In schemaTable.Columns
         Console.WriteLine("{0}: {1}", _
            col.ColumnName, row(col.Ordinal))
      Next
   Catch ex As IndexOutOfRangeException
      Console.WriteLine("{0} is an invalid column number.", _
         ordinal)
   End Try
End Sub

Private Function SetupDataAdapter( _
   ByVal sqlString As String) As SqlDataAdapter
   ' Assuming all the default settings, create a SqlDataAdapter
   ' working with the AdventureWorks sample database that's 
   ' available with SQL Server.
   Dim connectionString As String = _
      "Data Source=(local);" & _
      "Initial Catalog=AdventureWorks;" & _
      "Integrated Security=true"
   Return New SqlDataAdapter(sqlString, connectionString)
End Function

注釈

GetSchemaTable メソッドは、各列に関するメタデータを次の順序で返します。

DataReader 列 [説明]
ColumnName に表示される列の DataTable名前。
ColumnOrdinal 列の序数
ColumnSize -1 の (またはMaxLength) プロパティDataColumnColumnSize決定できない場合、または関連しない場合は -1。それ以外の場合は、値を含む正のMaxLength整数。
NumericPrecision 列の型が数値型の場合、これは列の最大有効桁数です。 列の型が数値データ型でない場合、これは null 値です。
NumericScale 列データ型にスケール コンポーネントがある場合は、小数点の右側の桁数を返します。 それ以外の場合は、null 値を返します。
DataType 列の基になる型。
ProviderType 列のデータ型のインジケーターです。 列のデータ型が行ごとに異なる場合、この値は Object. この列に NULL 値を含めることはできません。
IsLong true 列のデータ型が String -1 で、その MaxLength プロパティが -1 の場合。 それ以外の場合は false
AllowDBNull true列に対して AllowDbNull 制約が true に設定されている場合。それ以外の場合は . false
IsReadOnly true 列を変更できない場合。それ以外の場合 false
IsRowVersion false、すべての列に対して。
IsUnique true: この列に同じ値を DataTable 持つ行が 2 つありません。 IsUnique は、列が単独でキーを表す場合、またはこの列にのみ適用される UNIQUE 型の制約がある場合に true であることが保証されます。 false: 列に重複する値を DataTable含めることができます。 この列の既定値は false です。
IsKey true: 列は、一連の列の 1 つであり、一緒に作成された列の行を一意に識別します DataTable。 行をIsKey一意に識別するtrue必要がある列のセットを設定します。DataTable この列のセットは列の最小セットである必要はありません。 この列のセットは、主キー、一意制約、または一意のインデックスから DataTable 生成できます。 false: 行を一意に識別するために列は必要ありません。 この値は、列が true 単一または複合主キーに参加している場合です。 それ以外の場合、その値は false.
IsAutoIncrement true: 列は、固定増分で新しい行に値を割り当てます。 false: 列は、固定増分で新しい行に値を割り当てません。 この列の既定値は false です。
BaseCatalogName 列を含むデータ ストア内のカタログの名前です。 Null ベース カタログ名を特定できない場合は 。 この列の既定値は値です null
BaseSchemaName この値は常に Null です。
BaseTableName DataTable の名前。
BaseColumnName 内の列の DataTable名前。
AutoIncrementSeed 's プロパティのDataTableAutoIncrementSeed値。
AutoIncrementStep 's プロパティのDataTableAutoIncrementStep値。
DefaultValue 's プロパティのDataColumnDefaultValue値。
Expression 現在の列が式列であり、式で使用されるすべての列が式列を含むのと同じ T:System.Data.DataTable に属している場合は式文字列。それ以外の場合 null
ColumnMapping MappingType 関連付 DataColumnけられている値。 型には、、 Attribute、、 ElementHidden、のいずれかを指定できます SimpleContent。 既定値は Element です。
BaseTableNamespace 's プロパティのDataTableNamespace値。
BaseColumnNamespace 's プロパティのDataColumnNamespace値。

適用対象