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

例外

示例

以下控制台应用程序示例检索有关指定列的架构信息。 传递 DisplaySchemaTableInfo 过程 a DataTableReader 和一个表示 列在 中的序号位置的 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 如果 ColumnSize 无法确定 或不相关的 (或 MaxLength) 属性 DataColumn ,则为 -1;否则为 0 或包含 MaxLength 值的正整数。
NumericPrecision 如果列类型是数值类型,则这是列的最大精度。 如果列类型不是数值数据类型,则此值为 null 值。
NumericScale 如果列数据类型具有刻度分量,则返回小数点右侧的位数。 否则,返回 null 值。
数据类型 列的基础类型。
ProviderType 列的数据类型的指示符。 如果列的数据类型因行而异,则此值为 Object。 此列不能包含 NULL 值。
IsLong true 如果列的数据类型为 String ,并且其 MaxLength 属性为 -1,则为 。 否则为 false
AllowDBNull true 如果列的 AllowDbNull 约束设置为 true,则为 ;否则为 false
IsReadOnly true 如果无法修改列,则为 ;否则为 false
IsRowVersion false,对于每一列。
IsUnique true:此列中没有两行 DataTable 可以具有相同的值。 IsUnique 如果列本身表示键,或者存在仅适用于此列的 UNIQUE 类型的约束,则保证为 true。 false:列可以包含 中的 DataTable重复值。 此列的默认值为 false
IsKey true:列是一组列之一,这些列组合起来唯一标识 中的 DataTable行。 设置为 IsKeytrue 的列集必须唯一标识 中的 DataTable行。 不要求这组列是最小组列。 这组列可以从主键、唯一 DataTable 约束或唯一索引生成。 false:不需要列来唯一标识行。 如果列参与单个主键或复合主键,则此值为 true 。 否则,其值为 false
IsAutoIncrement true:列以固定增量向新行赋值。 false:该列不以固定增量向新行赋值。 此列的默认值为 false
BaseCatalogName 包含该列的数据存储区中的目录的名称。 Null 如果无法确定基本目录名称,则为 。 此列的默认值为 值 null
BaseSchemaName 此值始终为 Null
BaseTableName DataTable 的名称。
BaseColumnName DataTable列的名称。
AutoIncrementSeed AutoIncrementSeed 属性的值DataTable
AutoIncrementStep AutoIncrementStep 属性的值DataTable
DefaultValue DefaultValue 属性的值DataColumn
Expression 如果当前列是表达式列并且表达式中使用的所有列都属于包含表达式列的相同 T:System.Data.DataTable 列,则为表达式字符串;否则为 null
ColumnMapping MappingTypeDataColumn关联的值。 类型可以是 、ElementHiddenSimpleContentAttribute一。 默认值是 Element
BaseTableNamespace Namespace 属性的值DataTable
BaseColumnNamespace Namespace 属性的值DataColumn

适用于