Поделиться через


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

Возвращаемое значение

A DataTable , описывающий метаданные столбца.

Исключения

Примеры

В следующем примере консольного приложения извлекаются сведения о схеме указанного столбца. DisplaySchemaTableInfo Передайте процедуру и 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 Порядковый номер столбца
РазмерСтолбца -1, если ColumnSize свойство (или MaxLength) свойства DataColumn невозможно определить или не имеет значения; в противном случае — значение 0 или положительное целое число, содержащее MaxLength значение.
Числовойprecision Если тип столбца является числовым типом, это максимальная точность столбца. Если тип столбца не является числовым типом данных, это значение NULL.
NumericScale Если тип данных столбца имеет компонент масштабирования, возвращается число цифр справа от десятичной запятой. В противном случае возвращает значение NULL.
Тип данных Базовый тип столбца.
ProviderType Индикатор типа данных столбца. Если тип данных столбца зависит от строки к строке, это значение равно Object. Этот столбец не может содержать значение NULL.
IsLong true Значение -1, если тип данных столбца имеет StringMaxLength значение -1. В противном случае — false.
AllowDBNull true Значение true для столбца, если для столбца задано ограничение AllowDbNull; falseв противном случае .
IsReadOnly true Значение , если столбец не может быть изменен; в противном случае false.
IsRowVersion false, для каждого столбца.
IsUnique true: в этом столбце DataTable нет двух строк. IsUnique Гарантируется, что столбец представляет ключ самостоятельно или имеет ограничение типа 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 Значение DataTableAutoIncrementSeed свойства.
AutoIncrementStep Значение DataTableAutoIncrementStep свойства.
Значение по умолчанию Значение DataColumnDefaultValue свойства.
Expression Строка выражения, если текущий столбец является столбцом выражения, а все столбцы, используемые в выражении, относятся к тому же T:System.Data.DataTable , что содержит столбец выражения; в противном случае null.
ColumnMapping Значение, связанное MappingTypeDataColumnс . Тип может быть одним из Attribute, ElementHiddenили SimpleContent. Значение по умолчанию — Element.
BaseTableNamespace Значение DataTableNamespace свойства.
BaseColumnNamespace Значение DataColumnNamespace свойства.

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