Compartilhar via


DataTableReader.GetSchemaTable Método

Definição

Retorna um DataTable que descreve os metadados da coluna do 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

Retornos

Um DataTable que descreve os metadados de coluna.

Exceções

Exemplos

O exemplo de aplicativo de console a seguir 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 DataTableReadere o procedimento gera informações de 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

Comentários

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

Coluna DataReader Descrição
ColumnName O nome da coluna como ela aparece no DataTable.
ColumnOrdinal O ordinal da coluna
ColumnSize -1 se a ColumnSize propriedade (ou MaxLength) do DataColumn não puder ser determinada ou não for relevante; caso contrário, 0 ou um inteiro positivo que contenha o MaxLength valor.
NumericPrecision Se o tipo de coluna for um tipo numérico, essa será a precisão máxima da coluna. Se o tipo de coluna não for um tipo de dados numérico, esse será um valor nulo.
NumericScale Se o tipo de dados de coluna tiver um componente de escala, retorne o número de dígitos à direita do ponto decimal. Caso contrário, retorne um valor nulo.
Tipo de dados O tipo subjacente da coluna.
ProviderType O indicador do tipo de dados da coluna. Se o tipo de dados da coluna variar de linha para linha, esse valor será Object. Esta coluna não pode ter um valor nulo.
IsLong true se o tipo de dados da coluna for String e sua MaxLength propriedade for -1. Caso contrário, false.
AllowDBNull true se a restrição AllowDbNull estiver definida como true 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: nenhuma duas linhas no DataTable pode ter o mesmo valor nesta coluna. IsUnique é garantido ser true se a coluna representa uma chave por si só ou se há uma restrição do tipo UNIQUE que se aplica somente a esta coluna. false: a coluna pode conter valores duplicados no DataTable. O padrão desta coluna é false.
IsKey true: a coluna é um de um conjunto de colunas que, juntas, identificam exclusivamente a linha no DataTable. O conjunto de colunas com IsKey definido como true deve identificar exclusivamente uma linha no DataTable. Não há nenhum requisito de que esse conjunto de colunas seja um conjunto mínimo de colunas. Esse conjunto de colunas pode ser gerado de uma DataTable chave primária, uma restrição exclusiva ou um índice exclusivo. false: a coluna não é necessária para identificar exclusivamente a linha. Esse valor será true se a coluna participar de uma chave primária única ou composta. Caso contrário, seu valor será 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 repositório de dados que contém a coluna. Null se o nome do catálogo base não puder ser determinado. O valor padrão para esta 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 do .AutoIncrementSeed
Autoincrementstep O valor da DataTablepropriedade do .AutoIncrementStep
DefaultValue O valor da DataColumnpropriedade do .DefaultValue
Expression A cadeia de caracteres de expressão, se a coluna atual for uma coluna de expressão e todas as colunas usadas na expressão pertencerem ao mesmo 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 dos Attribute, Element, Hiddenou SimpleContent. O valor padrão é Element.
BaseTableNamespace O valor da DataTablepropriedade do .Namespace
BaseColumnNamespace O valor da DataColumnpropriedade do .Namespace

Aplica-se a