DataTableReader.GetSchemaTable Método

Definición

Devuelve un objeto DataTable que describe los metadatos de columna del 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

Devoluciones

DataTable que describe los metadatos de columna.

Excepciones

La clase DataTableReader está cerrada.

Ejemplos

En el ejemplo de aplicación de consola siguiente se recupera información de esquema sobre la columna especificada. Pase el DisplaySchemaTableInfo procedimiento a DataTableReader y un entero que represente la posición ordinal de una columna dentro DataTableReaderde y el procedimiento genera información de esquema en la ventana de consola.

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

Comentarios

El método GetSchemaTable devuelve metadatos sobre cada columna en el orden siguiente:

Columna DataReader Descripción
ColumnName Nombre de la columna tal como aparece en .DataTable
ColumnOrdinal Ordinal de la columna
ColumnSize -1 si la ColumnSize propiedad (o MaxLength) de DataColumn no se puede determinar o no es relevante; de lo contrario, 0 o un entero positivo que contiene el MaxLength valor.
NumericPrecision Si el tipo de columna es un tipo numérico, se trata de la precisión máxima de la columna. Si el tipo de columna no es un tipo de datos numérico, se trata de un valor NULL.
NumericScale Si el tipo de datos de columna tiene un componente de escala, devuelva el número de dígitos a la derecha del separador decimal. De lo contrario, devuelve un valor NULL.
DataType Tipo subyacente de la columna.
ProviderType Indicador del tipo de datos de la columna. Si el tipo de datos de la columna varía de fila a fila, este valor es Object. Esta columna no puede contener un valor.
IsLong true si el tipo de datos de la columna es String y su MaxLength propiedad es -1. En caso contrario, es false.
AllowDBNull true si la restricción AllowDbNull se establece en true para la columna; de lo contrario, false.
IsReadOnly true si no se puede modificar la columna; de lo contrario, false.
IsRowVersion false, para cada columna.
IsUnique true: no puede haber dos filas en puede DataTable tener el mismo valor en esta columna. IsUnique se garantiza que es true si la columna representa una clave por sí misma o si hay una restricción de tipo UNIQUE que solo se aplica a esta columna. false: la columna puede contener valores duplicados en .DataTable El valor predeterminado de esta columna es false.
IsKey true: la columna es uno de un conjunto de columnas que, tomadas juntas, identifican de forma única la fila de DataTable. El conjunto de columnas con IsKey establecido en true debe identificar de forma única una fila en .DataTable No es necesario que este conjunto de columnas sea un conjunto mínimo de columnas. Este conjunto de columnas se puede generar a partir de una DataTable clave principal, una restricción única o un índice único. false: la columna no es necesaria para identificar de forma única la fila. Este valor es true si la columna participa en una clave principal única o compuesta. De lo contrario, su valor es false.
IsAutoIncrement true: la columna asigna valores a nuevas filas en incrementos fijos. false: la columna no asigna valores a nuevas filas en incrementos fijos. El valor predeterminado de esta columna es false.
BaseCatalogName Nombre del catálogo del almacén de datos que contiene la columna. Null si no se puede determinar el nombre del catálogo base. El valor predeterminado de esta columna es un null valor.
BaseSchemaName Este valor es Null siempre.
BaseTableName Nombre del objeto DataTable.
BaseColumnName Nombre de la columna en .DataTable
AutoIncrementSeed Valor de la DataTablepropiedad de AutoIncrementSeed .
AutoIncrementStep Valor de la DataTablepropiedad de AutoIncrementStep .
DefaultValue Valor de la DataColumnpropiedad de DefaultValue .
Expression La cadena de expresión, si la columna actual es una columna de expresión y todas las columnas usadas en la expresión pertenecen a la misma T:System.Data.DataTable que contiene la columna de expresión; de lo contrario null, .
ColumnMapping Valor MappingType asociado a DataColumn. El tipo puede ser uno de Attribute, Element, Hiddeno SimpleContent. El valor predeterminado es Element.
BaseTableNamespace Valor de la DataTablepropiedad de Namespace .
BaseColumnNamespace Valor de la DataColumnpropiedad de Namespace .

Se aplica a