DataTableReader.GetSchemaTable Método

Definição

Devolve um DataTable que descreve os metadados DataTableReaderda coluna de .

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

Devoluções

A DataTable que descreve os metadados da coluna.

Exceções

Exemplos

O seguinte exemplo de aplicação de consola recupera informações de esquema sobre a coluna especificada. Passe o DisplaySchemaTableInfo procedimento a DataTableReader e um inteiro que representa a posição ordinal de uma coluna dentro do DataTableReader, e o procedimento fornece informação do esquema para a janela do console.

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

Observações

O método GetSchemaTable devolve metadados sobre cada coluna na seguinte ordem:

Coluna DataReader Description
ColumnName O nome da coluna tal como aparece no DataTable.
ColumnOrdinal O ordinal da coluna
Tamanho da Coluna -1 se a ColumnSize propriedade (ou MaxLength) de não DataColumn puder ser determinada ou não for relevante; caso contrário, 0 ou um inteiro positivo que contenha o MaxLength valor.
Precisão Numérica Se o tipo de coluna for um tipo numérico, esta é a precisão máxima da coluna. Se o tipo de coluna não for um tipo de dado numérico, isto é um valor nulo.
NumericScale Se o tipo de dado da coluna tiver um componente de escala, deva o número de dígitos à direita do ponto decimal. Caso contrário, devolve um valor nulo.
Tipo de Dados O tipo subjacente da coluna.
Tipo de provedor O indicador do tipo de dado da coluna. Se o tipo de dado da coluna variar de linha para linha, este valor é Object. Esta coluna não pode conter um valor nulo.
IsLong true se o tipo de dados da coluna for String e a sua MaxLength propriedade for -1. Caso contrário, false.
AllowDBNull true se a restrição AllowDbNull for definida como verdadeira para a coluna; caso contrário, false.
IsReadOnly true se a coluna não puder ser modificada; caso contrário false.
IsRowVersion false, para cada coluna.
IsUnique true: Não há duas linhas em que DataTable podem ter o mesmo valor nesta coluna. IsUnique é garantido que é verdadeiro se a coluna representa uma chave por si só ou se existir uma restrição de tipo ÚNICO que se aplique apenas a esta coluna. false: A coluna pode conter valores duplicados no DataTable. O padrão desta coluna é false.
IsKey true: A coluna é uma de um conjunto de colunas que, tomadas em conjunto, identificam de forma única a linha no DataTable. O conjunto de colunas com IsKey definido para true deve identificar unicamente uma linha no DataTable. Não há qualquer requisito de que este conjunto de colunas seja um conjunto mínimo de colunas. Este conjunto de colunas pode ser gerado a partir de uma DataTable chave primária, uma restrição única ou um índice único. false: A coluna não é necessária para identificar de forma única a linha. Este valor ocorre true se a coluna participar numa chave primária simples ou composta. Caso contrário, o seu valor é false.
IsAutoIncrement true: A coluna atribui valores a novas linhas em incrementos fixos. false: A coluna não atribui valores a novas linhas em incrementos fixos. O padrão desta coluna é false.
BaseCatalogName O nome do catálogo no armazenamento de dados que contém a coluna. Null se o nome do catálogo base não puder ser determinado. O valor padrão desta coluna é um null valor.
BaseSchemaName Este valor é sempre Null.
BaseTableName O nome do DataTable.
BaseColumnName O nome da coluna no DataTable.
AutoIncrementSeed O valor da DataTablepropriedade de AutoIncrementSeed .
AutoIncrementStep O valor da DataTablepropriedade de AutoIncrementStep .
Valor Padrão O valor da DataColumnpropriedade de DefaultValue .
Expression A cadeia de expressão, se a coluna atual for uma coluna de expressão e todas as colunas usadas na expressão pertencerem à mesma T:System.Data.DataTable que contém a coluna de expressão; caso contrário null.
ColumnMapping O MappingType valor associado ao DataColumn. O tipo pode ser um de Attribute, Element, Hidden, ou SimpleContent. O valor predefinido é Element.
BaseTableNamespace O valor da DataTablepropriedade de Namespace .
BaseColumnNamespace O valor da DataColumnpropriedade de Namespace .

Aplica-se a