Comparteix a través de


DataTableReader.GetSchemaTable Método

Definición

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

que DataTable describe los metadatos de columna.

Excepciones

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
TamañoDeColumna -1 si la ColumnSize propiedad (o MaxLength) de no DataColumn 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, esta es 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.
TipoDeDatos 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 NULL.
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, es .
IsRowVersion false, para cada columna.
IsUnique true: ninguna de las dos filas de DataTable puede 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 un conjunto de columnas que, tomadas juntas, identifican de forma única la fila de DataTable. El conjunto de columnas con IsKey establecido true en 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 en el 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 siempre Nulles .
BaseTableName El nombre del DataTable.
BaseColumnName Nombre de la columna en .DataTable
AutoIncrementSeed Valor de la DataTablepropiedad de AutoIncrementSeed .
AutoIncrementStep Valor de la DataTablepropiedad de AutoIncrementStep .
ValorPredeterminado 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; en caso 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