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, описывающий метаданные столбцов.

Исключения

Объект DataTableReader закрыт.

Примеры

В следующем примере консольного приложения извлекаются сведения о схеме указанного столбца. Передайте процедуре DisplaySchemaTableInfoDataTableReader и целое число, представляющее порядковый номер столбца в 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, если ColumnSize свойство (или MaxLength) объекта не может быть определено или не имеет отношения; в противном случае — значение 0 или положительное целое число, содержащее MaxLengthDataColumn значение .
NumericPrecision Если тип столбца является числовым, это максимальная точность столбца. Если тип столбца не является числовым типом данных, это значение null.
NumericScale Если тип данных столбца имеет компонент масштабирования, верните число цифр справа от десятичной запятой. В противном случае возвращается значение NULL.
DataType Базовый тип столбца.
ProviderType Признак типа данных столбца. Если тип данных столбца отличается от строки к строке, это значение равно Object. Этот столбец не может содержать значение NULL.
IsLong true Значение , если тип данных столбца — и String его MaxLength свойство равно -1. В противном случае — значение false.
AllowDBNull true Значение , если ограничение AllowDbNull имеет значение true для столбца; в противном случае — false.
IsReadOnly true Значение , если столбец не может быть изменен; в противном случае false.
IsRowVersion falseдля каждого столбца.
IsUnique true: две строки в DataTable не могут иметь одинаковое значение в этом столбце. IsUnique Параметр гарантированно имеет значение true, если столбец представляет ключ сам по себе или имеется ограничение типа UNIQUE, которое применяется только к этому столбцу. false: столбец может содержать повторяющиеся значения в DataTable. По умолчанию этот столбец имеет значение false.
IsKey true: столбец является одним из наборов столбцов, которые, вместе взятые, однозначно идентифицируют строку в DataTable. Набор столбцов, для IsKey которым задано значение , true должен однозначно идентифицировать строку в DataTable. Нет необходимости, чтобы этот набор столбцов являлся минимальным. Этот набор столбцов может быть создан из первичного DataTable ключа, уникального ограничения или уникального индекса. false: столбец не требуется для уникальной идентификации строки. Это значение имеет значение , true если столбец участвует в одном или составном первичном ключе. В противном случае его значение равно false.
IsAutoIncrement true: столбец присваивает значения новым строкам с фиксированным шагом. false: столбец не присваивает значения новым строкам с фиксированным шагом. По умолчанию этот столбец имеет значение false.
BaseCatalogName Имя каталога в хранилище данных, содержащем столбец. Null Значение , если не удается определить имя базового каталога. Значением по умолчанию для этого столбца null является значение .
BaseSchemaName Это значение всегда равно Null.
BaseTableName Имя DataTable.
BaseColumnName Имя столбца в DataTable.
AutoIncrementSeed Значение DataTableсвойства объекта AutoIncrementSeed .
Шаг autoIncrementStep Значение DataTableсвойства объекта AutoIncrementStep .
DefaultValue Значение DataColumnсвойства объекта DefaultValue .
Expression Строка выражения, если текущий столбец является столбцом выражений и все столбцы, используемые в выражении, принадлежат к тому же T:System.Data.DataTable , который содержит столбец выражения; в противном случае null— значение .
ColumnMapping Значение, MappingType связанное DataColumnс . Тип может быть одним из Attribute, Element, Hiddenили SimpleContent. Значение по умолчанию — Element.
BaseTableNamespace Значение DataTableсвойства объекта Namespace .
BaseColumnNamespace Значение DataColumnсвойства объекта Namespace .

Применяется к