Cómo recuperar esquema de columna mediante el método GetSchemaTable del objeto DataReader y Visual C# .NET

Para una versión de Microsoft Visual Basic .NET de este artículo, consulte
310108 .
Para una versión de Microsoft Visual C++ .NET de este artículo, consulte
309683 .

Este artículo hace referencia al siguiente espacio de nombres de biblioteca de clases de Microsoft.NET Framework:
  • System.Data.OleDb

EN ESTA TAREA

Resumen

En este artículo se muestra cómo utilizar el método GetSchemaTable del objeto DataReader de ADO.NET para recuperar información de esquema de columna. Otro nombre para el esquema de una columna es sus propiedades de campo. Información de esquema de columna incluye la siguiente información acerca de la columna:
  • Nombre
  • Tipo de datos
  • Tamaño
  • Si la columna es un campo de clave principal
  • Si la columna es un campo Autonumérico (AutoIncrement)
El método GetSchemaTable devuelve una propiedad DataTable que contiene el esquema de columna para un DataReader. DataTable contiene una fila por cada campo del conjunto de resultados. Cada columna se asigna a una propiedad del campo en el conjunto de resultados. La propiedad ColumnName de la columna DataTable es el nombre de la propiedad del campo, como la propiedad ColumnName, DataType, ColumnSize, IsKeyColumno IsAutoIncrement . El valor de la columna DataTable es el valor de la propiedad del campo, como el valor del nombre de la propiedad ColumnName .
Nota: Para obtener la información de clave principal, incluso si un campo forma parte de una clave principal y si es un campo AutoIncrement , debe establecer el valor de CommandBehavior del DataReader para CommandBehavior.KeyInfo.

Puede utilizar el método GetSchemaTable con el proveedor de OLE DB .NET o con el proveedor de SQL .NET. El método OleDbDataReader.GetSchemaTable se asigna al método IColumnsRowset:: GetColumnsRowset de OLE DB. El método SqlDataReader.GetSchemaTable no utiliza una capa del proveedor de OLE DB.

De nota, a menos que utilice explícitamente el método GetSchemaTable , el DataReader no devuelve el esquema de columna. Además, si utiliza GetSchemaTable para recuperar el esquema de columna, no se puede actualizar el DataReader. DataReader siempre recupera una secuencia de sólo lectura, sólo hacia delante de los datos de una base de datos.

Cuándo se debe utilizar el método GetSchemaTable

  • El objeto SqlConnection no admite recuperar información de esquema de SQL Server en un método análogo al método de GetOleDbSchemaTable del objeto OleDbConnection . El método GetSchemaTable de la clase SqlDataReader proporciona una forma sencilla de obtener información de esquema de columna desde SQL Server.
  • Aunque el método de GetOleDbSchemaTable del objeto OleDbConnection puede devolver información de esquema de columna, tabla y base de datos, es posible que el método GetSchemaTable del objeto DataReader es más fácil de utilizar si desea recuperar información de esquema de columna sólo.
  • Puede utilizar el método GetSchemaTable para crear un nuevo objeto DataTable basándose en el esquema de una propiedad DataTable existente mientras personaliza los nombres de columna y otros atributos de columna. Código de ejemplo que muestra cómo utilizar GetSchemaTable para definir una tabla nueva, consulte el tema "Visual Studio Samples: Fitch y Mather 7.0 ejecutar SQL Query" en la documentación de ayuda en pantalla de Microsoft Visual Studio. NET.

Recuperar el esquema de columna con el proveedor OLE DB.

Este ejemplo muestra la información de esquema para las columnas (propiedades de campo) de la tabla Employees de la base de datos Northwind de SQL Server.

Tenga en cuenta que cuando utiliza el proveedor OLE DB. NET, el método GetSchemaTable del objeto OleDbDataReader .
  1. Inicie Visual Studio .NET y cree un nuevo proyecto de aplicación de consola de Visual C#. Se crea Class1.cs de forma predeterminada.
  2. Abra la ventana de código de Class1. Pegue el código siguiente en la parte superior de la ventana código, encima de la declaración de espacio de nombres :
    using System.Data;using System.Data.OleDb;

  3. En la ventana código, pegue el código siguiente en la función Main :
    OleDbConnection cn = new OleDbConnection();OleDbCommand cmd = new OleDbCommand();
    DataTable schemaTable;
    OleDbDataReader myReader;

    //Open a connection to the SQL Server Northwind database.
    cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=login;
    Password=password;Initial Catalog=Northwind";
    cn.Open();

    //Retrieve records from the Employees table into a DataReader.
    cmd.Connection = cn;
    cmd.CommandText = "SELECT * FROM Employees";
    myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo);

    //Retrieve column schema into a DataTable.
    schemaTable = myReader.GetSchemaTable();

    //For each field in the table...
    foreach (DataRow myField in schemaTable.Rows){
    //For each property of the field...
    foreach (DataColumn myProperty in schemaTable.Columns) {
    //Display the field name and value.
    Console.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString());
    }
    Console.WriteLine();

    //Pause.
    Console.ReadLine();
    }

    //Always close the DataReader and connection.
    myReader.Close();
    cn.Close();

  4. Modificar los parámetros de la propiedad ConnectionString para conectarse correctamente a su equipo de SQL Server.
  5. Presione la tecla F5 para compilar y ejecutar el proyecto. Observe que las propiedades de cada campo se muestran en la ventana de consola.
  6. Presione ENTRAR para desplazarse por la lista, finalizar la aplicación consola y volver al entorno de desarrollo integrado (IDE).

Recuperar el esquema de columna con el proveedor SQL.

Este ejemplo muestra la información de esquema para las columnas (propiedades de campo) de la tabla Employees de la base de datos Northwind de SQL Server.

Tenga en cuenta que cuando utiliza el proveedor de SQL. NET, el método GetSchemaTable del objeto SqlDataReader .
  1. Inicie Visual Studio .NET y cree un nuevo proyecto de aplicación de consola de Visual C#. Se crea Class1.cs de forma predeterminada.
  2. Abra la ventana de código de Class1. Pegue el código siguiente en la parte superior de la ventana código, encima de la declaración de espacio de nombres :
    using System.Data;using System.Data.SqlClient;

  3. En la ventana código, pegue el código siguiente en la función Main :
    SqlConnection cn = new SqlConnection();SqlCommand cmd = new SqlCommand();
    DataTable schemaTable;
    SqlDataReader myReader;

    //Open a connection to the SQL Server Northwind database.
    cn.ConnectionString = "Data Source=server;User ID=login;
    Password=password;Initial Catalog=Northwind";
    cn.Open();

    //Retrieve records from the Employees table into a DataReader.
    cmd.Connection = cn;
    cmd.CommandText = "SELECT * FROM Employees";
    myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo);

    //Retrieve column schema into a DataTable.
    schemaTable = myReader.GetSchemaTable();

    //For each field in the table...
    foreach (DataRow myField in schemaTable.Rows){
    //For each property of the field...
    foreach (DataColumn myProperty in schemaTable.Columns) {
    //Display the field name and value.
    Console.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString());
    }
    Console.WriteLine();

    //Pause.
    Console.ReadLine();
    }

    //Always close the DataReader and connection.
    myReader.Close();
    cn.Close();

  4. Modificar los parámetros de la propiedad ConnectionString para conectarse correctamente a su equipo de SQL Server.
  5. Presione F5 para compilar y ejecutar el proyecto. Observe que las propiedades de cada campo se muestran en la ventana de consola.
  6. Presione ENTRAR para desplazarse por la lista, finalizar la aplicación consola y volver al IDE.

Referencias

Para obtener más información acerca de DataReader y el método GetSchemaTable , vea los temas siguientes en la documentación de ayuda en línea de Visual Studio. NET:Para obtener información adicional acerca de cómo utilizar el método GetOleDbSchemaTable del objeto OleDbConnection recuperar información del esquema, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
309681 cómo recuperar información del esquema mediante GetOleDbSchemaTable y Visual C# .NET
Propiedades

Id. de artículo: 310107 - Última revisión: 22 ene. 2017 - Revisión: 1

Microsoft ADO.NET 1.1, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition

Comentarios