CÓMO: Recuperar información del esquema mediante GetOleDbSchemaTable y Visual Basic .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 309488 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E309488
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se muestra cómo utilizar el método GetOleDbSchemaTable del objeto OleDbConnection en ADO.NET para recuperar información del esquema de base de datos. La información de esquema en un origen de datos incluye bases de datos o catálogos que estén disponibles desde el origen de datos, tablas y vistas de una base de datos, así como restricciones que existan, etc. La información de esquema de una tabla incluye las claves principales, columnas y campos autonuméricos.

Tenga en cuenta que ningún método equivale a GetOleDbSchemaTable cuando se usa un objeto SqlClient.SqlConnection. El proveedor de datos .NET de SQL Server expone información de esquema de servidor mediante procedimientos almacenados y vistas informativas. Para obtener más información acerca de las vistas y los procedimientos almacenados que están disponibles a través de Microsoft SQL Server, consulte la referencia Transact-SQL en la biblioteca de MSDN.

Requisitos

En la lista siguiente se describe el hardware, el software, la infraestructura de red y los Service Pack recomendados que se necesitarán:
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server o Windows NT 4.0 Server
  • Microsoft Visual Studio .NET
En el presente artículo se da por supuesto que está familiarizado con los temas siguientes:
  • Visual Studio .NET
  • Fundamentos y sintaxis de ADO.NET

Método GetOleDbSchemaTable del objeto OleDbConnection

El proveedor de datos .NET de OLE DB usa el método GetOleDbSchemaTable del objeto OleDbConnection para exponer información de esquema. GetOleDbSchemaTable devuelve un elemento DataTable que se llena con la información de esquema.

El primer argumento de GetOleDbSchemaTable es el parámetro de esquema, un argumento OleDbSchemaGuid que se identifica con la información de esquema que se va a devolver (como tablas, columnas y claves principales). El segundo argumento es una matriz de restricciones de objeto para filtrar las filas que se devuelven en el esquema DataTable (por ejemplo, puede especificar restricciones para el nombre, tipo, propietario y esquema de la tabla).

Miembros de OleDbSchemaGuid

El argumento OleDbSchemaGuid especifica el tipo de tabla de esquema para el método GetOleDbSchemaTable. Algunos de los miembros de OleDbSchemaGuid incluyen lo siguiente:
  • Columnas
  • Claves externas
  • Índices
  • Claves principales
  • Tablas
  • Vistas
Para obtener una lista completa de los miembros de OleDbSchemaGuid, consulte el sitio Web "Miembros de OleDbSchemaGuid" en la sección Referencias .

Restricciones

Las restricciones son una matriz de objeto con valores de filtro, donde cada uno de ellos corresponde a un elemento DataColumn del elemento DataTable resultante. El argumento OleDbSchemaGuid determina las restricciones importantes. Por ejemplo, si especifica un elemento OleDbSchemaGuid de tablas, la matriz de restricciones queda de la manera siguiente:
{TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE}
Para comprobar las restricciones disponibles, haga clic en cualquiera de los miembros de OleDbSchemaGuid en el siguiente sitio Web de Microsoft Web:
OleDbSchemaGuid Members
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdataoledboledbschemaguidmemberstopic.asp
Cuando pase valores en la matriz de restricciones, incluya la clave Nothing de Visual Basic .NET para los elementos de la matriz que no contengan valores. Por ejemplo, para recuperar esquemas de tablas use OleDbSchemaGuid.Tables. Sin embargo, si especifica tablas, esto también devuelve alias, sinónimos, vistas y otros objetos relacionados. Así, si desea ocultar todos los objetos excepto las tablas, use una restricción de TABLE para TABLE_TYPE. Puede usar Nothing para TABLE_CATALOG, TABLE_SCHEMA y TABLE_NAME porque no está filtrando estos objetos:
 MySchemaTable = MyConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
                   New Object() {Nothing, Nothing, Nothing, "TABLE"})

DataTable devuelto

El elemento DataTable que devuelve el método GetOleDbSchemaTable, tiene una fila para cada objeto que cumple con los criterios de restricción y del tipo OleDbSchemaGuid. El elemento DataTable tiene una columna para cada una de las columnas de restricción, que va seguida de información de esquema adicional basada en el campo OleDbSchemaGuid.

Por ejemplo, si usa el código siguiente, cada fila del elemento DataTable devuelto es una tabla de base de datos:
MySchemaTable = MyConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
                   New Object() {Nothing, Nothing, Nothing, "TABLE"})
Las columnas devueltas en el elemento DataTable son las columnas de restricción (TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE), que van seguidas de las columnas de esquema adicionales de TABLE_GUID, DESCRIPTION, TABLE_PROPID, DATE_CREATED y DATE_MODIFIED.

Para obtener esta lista de nombres de columna (es decir, los descriptores de campo, como TABLE_CATALOG, TABLE_SCHEMA y TABLE_NAME), puede usar la posición ordinal de las columnas. Tenga en cuenta que la matriz Columnas está basada en cero:
For i = 0 To schemaTable.Columns.Count - 1
   Console.WriteLine(schemaTable.Columns(i).ToString)
Next i
Para obtener los valores de cada columna (es decir, los nombres de tabla reales, como Categorías, Clientes y Empleados), puede usar el nombre de elemento en DataRow. Tenga en cuenta que el elemento Rows está basado en cero:
For i = 0 To schemaTable.Rows.Count - 1
   Console.WriteLine(schemaTable.Rows(i)!TABLE_NAME.ToString)
Next i
También puede usar la posición ordinal del elemento de la fila para obtener los valores. Tenga en cuenta que la matriz Item está basada en cero:
For i = 0 To schemaTable.Rows.Count - 1
   Console.WriteLine(schemaTable.Rows(i).Item(2).ToString)
Next i

Crear un ejemplo que enumere las tablas de una base de datos

El ejemplo siguiente enumera las tablas de la base de datos Neptuno de SQL Server.

OleDbSchemaGuid.Tables devuelve estas tablas (incluidas las vistas) a las que puede tener acceso un inicio de sesión dado. Si especifica una matriz de objeto de {Nothing, Nothing, Nothing, "TABLE"}, aplique un filtro para incluir sólo un elemento TABLE_TYPE de TABLE. A continuación enumere el nombre de tabla (TABLE_NAME) de cada fila de la tabla de esquema devuelta.
  1. Abra Visual Studio .NET.
  2. Cree un nuevo proyecto de aplicación de consola de Visual Basic. Module1.vb se agrega al proyecto de manera predeterminada.
  3. Abra la ventana Código de Module1. Pegue el código siguiente en la parte superior de la ventana Código, encima de la declaración Module:
       Imports System.Data
       Imports System.Data.OleDb
  4. En la ventana Código, pegue el código siguiente en el procedimiento Sub Main:
            Dim cn As New OleDbConnection()
            Dim schemaTable As DataTable
            Dim i As Integer
    
            'Conectarse a la base de datos Neptuno de SQL Server.
            'Asegúrese de usar una cuenta que tenga permisos para enumerar tablas.
            cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=sa;" & _
                                  "Password=password;Initial Catalog=Neptuno"
            cn.Open()
    
            'Recuperar la información de esquema sobre tablas.
            'Dado que las tablas incluyen tablas, vistas y otros objetos,
            'restrinja los datos sólo a TABLE en la matriz de restricciones de objeto.
            schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
                          New Object() {Nothing, Nothing, Nothing, "TABLE"})
    
            'Enumere el nombre de tabla para cada fila de la tabla de esquema.
            For i = 0 To schemaTable.Rows.Count - 1
                Console.WriteLine(schemaTable.Rows(i)!TABLE_NAME.ToString)
            Next i
    
            'Cerrar explícitamente; no esperar a una recolección de elementos no utilizados.
            cn.Close()
    
            'Pause
            Console.ReadLine()
  5. Modifique el elemento ConnectionString para conectarse al servidor SQL Server con una cuenta que tenga permisos para enumerar tablas de la base de datos Neptuno.
  6. Presione la tecla F5 para compilar y ejecutar el proyecto. Observe que las tablas se enumeran en la ventana de la consola.
  7. Presione ENTRAR para finalizar la aplicación de consola y volver al Entorno de desarrollo integrado (IDE).

Crear un ejemplo que recupere el esquema de una tabla

El ejemplo siguiente enumera información de esquema para la tabla Empleados de la base de datos Neptuno de SQL Server.

OleDbSchemaGuid.Tables devuelve estas tablas (incluidas las vistas) a las que puede tener acceso un inicio de sesión dado. Si especifica una matriz de objeto de {Nothing, Nothing, "Empleados", "TABLE"}, aplique un filtro para incluir sólo una tabla llamada Empleados. A continuación enumere la información de esquema para la tabla de esquema devuelta.
  1. Cree un nuevo proyecto de aplicación de consola de Visual Basic. Module1.vb se agrega al proyecto de manera predeterminada.
  2. Abra la ventana Código de Module1. Pegue el código siguiente en la parte superior de la ventana Código, encima de la declaración Module:
       Imports System.Data
       Imports System.Data.OleDb
  3. En la ventana Código, pegue el código siguiente en el procedimiento Sub Main:
            Dim cn As New OleDbConnection()
            Dim schemaTable As DataTable
            Dim i As Integer
    
            'Conectarse a la base de datos Neptuno de SQL Server.
            'Asegúrese de usar una cuenta que tenga permisos para enumerar tablas.
            cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=sa;" & _
                                  "Password=password;Initial Catalog=Neptuno"
            cn.Open()
    
            'Recuperar información de esquema sobre la tabla Empleados.
            schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
                          New Object() {Nothing, Nothing, "Empleados", "TABLE"})
    
            'Enumerar la información de esquema para la tabla Empleados
            'en formato Descriptor de campo: Valor de campo.
            For i = 0 To schemaTable.Columns.Count - 1
                Console.WriteLine(schemaTable.Columns(i).ToString & " : " & _
                   schemaTable.Rows(0).Item(i).ToString)
            Next i
    
            'Cerrar explícitamente; no esperar a una recolección de elementos no utilizados.
            cn.Close()
    
            'Pause
            Console.ReadLine()
  4. Modifique el elemento ConnectionString para conectarse al servidor SQL Server con una cuenta que tenga permisos para recuperar el esquema de la tabla Empleados.
  5. Presione F5 para compilar y ejecutar el proyecto. Observe que la información de esquema se enumera en la ventana de la consola.
  6. Presione ENTRAR para finalizar la aplicación de consola y volver al IDE.

Crear un ejemplo que enumere las columnas de una tabla

El ejemplo siguiente enumera los nombres de columnas de la tabla Empleados en la base de datos Neptuno de SQL Server.

OleDbSchemaGuid.Columns devuelve estas columnas en tablas y vistas a las que puede tener acceso un inicio de sesión dado. Si especifica una matriz de objeto de {Nothing, Nothing, "Empleados", Nothing}, aplique un filtro para incluir sólo las columnas para la tabla Empleados.
  1. Cree un nuevo proyecto de aplicación de consola de Visual Basic. Module1.vb se agrega al proyecto de manera predeterminada.
  2. Abra la ventana Código de Module1. Pegue el código siguiente en la parte superior de la ventana Código, encima de la declaración Module:
       Imports System.Data
       Imports System.Data.OleDb
  3. En la ventana Código, pegue el código siguiente en el procedimiento Sub Main:
            Dim cn As New OleDbConnection()
            Dim schemaTable As DataTable
            Dim i As Integer
    
            'Conectarse a la base de datos Neptuno de SQL Server.
            'Asegúrese de usar una cuenta que tenga permisos
            'para enumerar las columnas de la tabla Empleados.
            cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=sa; & _
                                  "Password=password;Initial Catalog=Neptuno"
            cn.Open()
    
            'Recuperar la información de esquema sobre columnas.
            'Restringir los datos sólo a la tabla Empleados.
            schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, _
                          New Object() {Nothing, Nothing, "Empleados", Nothing})
    
            'Enumere el nombre de columna para cada fila de la tabla de esquema.
            For i = 0 To schemaTable.Rows.Count - 1
                Console.WriteLine(schemaTable.Rows(i)!COLUMN_NAME.ToString)
            Next i
    
            'Cerrar explícitamente; no esperar a una recolección de elementos no utilizados.
            cn.Close()
    
            'Pause
            Console.ReadLine()
  4. Modifique el elemento ConnectionString para conectarse al servidor SQL Server con una cuenta que tenga permisos para enumerar columnas de la tabla Empleados.
  5. Presione F5 para compilar y ejecutar el proyecto. Tenga en cuenta que las columnas de la tabla Empleados se enumeran en la ventana de la consola.
  6. Presione ENTRAR para finalizar la aplicación de consola y volver al IDE.

Crear un ejemplo que enumere las claves principales de una tabla

El ejemplo siguiente enumera las claves principales de la tabla Empleados en la base de datos Neptuno de SQL Server y de la tabla Empleado en la base de datos Pubs de SQL Server.

OleDbSchemaGuid.Primary_Keys devuelve estas claves principales en un catálogo al que puede tener acceso un inicio de sesión dado. En este ejemplo, el elemento OleDbConnection es para SQL Server pero no para una base de datos de SQL Server específica:
cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=sa;Password=password;"
En su lugar, este código especifica las bases de datos Neptuno o Pubs como TABLE_CATALOG en la matriz de restricciones. Este código especifica el propietario de la tabla, "dbo", para la restricción TABLE_SCHEMA. Además, este código especifica los nombres de tabla para la restricción TABLE_NAME.

Para obtener la clave principal de la tabla Empleados en la base de datos Neptuno, debe usar una matriz de objeto de {"Neptuno", "dbo", "Empleados"}:
schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, _
              New Object() {"Neptuno", "dbo", "Empleados"})
Para obtener la clave principal de la tabla Empleado en la base de datos Pubs, debe usar una matriz de objeto de {"Pubs", "dbo", "Empleado"}:
schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, _
              New Object() {"Pubs", "dbo", "Empleado"})
Para crear el ejemplo, siga estos pasos:
  1. Cree un nuevo proyecto de aplicación de consola de Visual Basic. Module1.vb se agrega al proyecto de manera predeterminada.
  2. Abra la ventana Código de Module1. Pegue el código siguiente en la parte superior de la ventana Código, encima de la declaración Module:
       Imports System.Data
       Imports System.Data.OleDb
  3. En la ventana Código, pegue el código siguiente en el procedimiento Sub Main:
            Dim cn As New OleDbConnection()
            Dim schemaTable As DataTable
    
            'Conectarse a SQL Server.
            'Asegúrese de usar una cuenta que tenga permisos para enumerar claves principales
            'en las bases de datos Neptuno y Pubs.
            cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=sa;" & _
                                  "Password=password;"
            cn.Open()
    
            'Recuperar la información de esquema sobre claves principales.
            'Restringir los datos sólo a la tabla Empleados en el catálogo de Neptuno.
            schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, _
                          New Object() {"Neptuno", "dbo", "Empleados"})
    
            'Enumerar la clave principal para la primera fila de la tabla de esquema.
            'Los primeros tres elementos (basados en cero) que aparecen en la fila son catálogo, esquema y tabla.
            'El cuarto elemento es la clave principal.
            Console.WriteLine(schemaTable.Rows(0).Item(3).ToString)
    
            'Recuperar la clave principal para la tabla Empleado en el catálogo de Pubs.
            schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, _
                          New Object() {"Pubs", "dbo", "Empleado"})
    
            'Enumerar la clave principal para la primera fila de la tabla de esquema.
            Console.WriteLine(schemaTable.Rows(0).Item(3).ToString)
    
            'Cerrar explícitamente; no esperar a una recolección de elementos no utilizados.
            cn.Close()
    
            'Pause
            Console.ReadLine()
  4. Modifique el elemento ConnectionString para conectarse al servidor SQL Server con una cuenta que tenga permisos suficientes para enumerar las claves principales.
  5. Presione F5 para compilar y ejecutar el proyecto. Tenga en cuenta que las claves principales de la tabla Empleados en la base de datos Neptuno y de la tabla Empleado en la base de datos Pubs, aparecen en la ventana de la consola.
  6. Presione ENTRAR para finalizar la aplicación de consola y volver al IDE.

REFERENCIAS

Para obtener una lista completa de los miembros de OleDbSchemaGuid, consulte el tema siguiente de la documentación del Kit de desarrollo de software (SDK) de Microsoft .NET Framework. Para obtener una lista de restricciones disponibles, haga clic en cualquiera de los miembros de OleDbSchemaGuid:
OleDbSchemaGuid Members
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdataoledboledbschemaguidmemberstopic.asp
Para obtener más información, consulte los temas siguientes en la documentación del SDK de .NET Framework:
Obtaining Schema Information from a Database
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguidnf/html/cpconobtainingschemainformationfromdatabase.asp

OleDbConnection.GetOleDbSchemaTable Method
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdataoledboledbconnectionclassgetoledbschematabletopic.asp

OleDbSchemaGuid.Tables Field
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdataoledboledbschemaguidclasstablestopic.asp

OleDbSchemaGuid.Columns Field
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdataoledboledbschemaguidclasscolumnstopic.asp

OleDbSchemaGuid.Primary_Keys Field
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdataoledboledbschemaguidclassprimary_keystopic.asp

Propiedades

Id. de artículo: 309488 - Última revisión: martes, 15 de enero de 2002 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft ADO .NET (incluido con .NET Framework)
  • Microsoft Visual Basic .NET 2002 Standard Edition
Palabras clave: 
kbhowto kbhowtomaster kbgrpdsvbdb KB309488

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com