Publicidad

Leer Schema Information con ADO.NET.


Por Alex el 30/09/2005 , Comentar el artículo

Comparte este artículo:        




A veces, cuando desarrollamos una aplicación es necesario tener acceso a datos del esquema (Schema Information) de la base de datos, como la longitud de un campo o si este admite nulls o no. Para esto tenemos unas funciones en ADO.NET y SQL Server que permitirán leer el esquema de una base de datos.


Hay que diferenciar dos formas de realizar este proceso en ADO.NET, si leemos el esquema de SQL Server con System.Data.SqlClient o si lo hacemos con System.Data.OleDb. El proveedor de datos OleDb dispone de métodos para acceder al esquema de la base de datos mientras el proveedor SqlClient no dispone de los mismos métodos, por esta razón, con SqlClient utilizaremos unas sentencias de SQL que nos devolverán la misma información

Lectura del esquema con System.Data.SqlClient.

Como he comentado antes, SqlClient no dispone de métodos nativos para acceder al esquema de la base de datos, dispone es su defecto de vistas del propio SQL Server para realizar estas acciones.

  • Listado de tablas. Para leer las tablas de una base de datos utilizaremos la siguiente vista:

    SELECT * FROM Information_Schema.Tables where Table_Type = 'BASE TABLE'"

    BASE TABLE nos indica que estamos buscando las tablas de la base de datos, también podríamos indicar VIEWS y la sentencia devolvería el listado de vistas.

  • Listado de columnas

    Para obtener el listado de columnas de una tabla utilizaremos la siguiente sentencia SQL:

    SELECT COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM Information_Schema.Columns WHERE TABLE_NAME = "jobs”

    En este caso nos devuelve la información correspondiente a la tabla jobs de la base de datos PUBS.

  • Código

    El código siguiente muestra como ejecutar desde c# las dos sentencias anteriores:

    public static DataSet LoadTableSchemaInfo(string db) {
     DataSet ds = new DataSet();
     string TABLES_SCHEMA = "SELECT Table_Schema, table_name FROM Information_Schema.Tables where Table_Type = 'BASE TABLE'"

     Connection(db);
     SqlCommand sqlComd = new SqlCommand(TABLES_SCHEMA, _connection);
     SqlDataAdapter dataAdatpter = new SqlDataAdapter(sqlComd);

     dataAdatpter.Fill(ds);

     _connection.Close();

     return(ds);
    }
    //
    public static DataSet LoadColumnSchemaInfo(string db, string column) {
     DataSet ds = new DataSet();
    string COLUMNS_SCHEMA = "SELECT COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM Information_Schema.Columns WHERE TABLE_NAME = ";

     Connection(db);
     SqlCommand sqlComd = new SqlCommand(COLUMNS_SCHEMA + "'" + column + "'", _connection);
     SqlDataAdapter dataAdatpter = new SqlDataAdapter(sqlComd);

     dataAdatpter.Fill(ds);

     _connection.Close();

     return(ds);
    }

    En estos dos métodos lo que hacemos es crear un DataSet y ejecutar la sentencia SQL contra la base de datos. Al final he dejado el código completo del ejemplo.

    Sobre estas vistas de sistema para leer el esquema de una base de datos encontrareis amplia información en los Books Online de SQL Server.

    Lectura del esquema con System.Data.OleDb

    Con OleDb la forma de leer el esquema cambia bastante debido a que OleDb incorpora funciones nativas para leerlo. A través del método GetOleDbSchemaTable podremos leer el esquema de una base de datos o de una tabla.

    Este método nos devolverá un DataTable con la información de las tablas o columnas:

  • Lectura de tablas:

    DataTable dtSchema = _connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] {null, null, null, "TABLE"});

  • Lectura de columnas:

    DataTable dtColumns = _connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] {null, null, column, null});

    En el ejemplo, c#, que acompaña al articulo encontrareis dos clases que muestran los dos métodos de acceso al esquema de una base de datos de SQL Server.

    Enlaces relacionadas:

    Código de ejemplo en c# 
    Información sobre Schema Information en los Books Online de SQL Server 

    Saludos
    Alex


    Si te ha gustado el artículo compartelo en:        


    Publicidad


    Añadir un comentarios:

    Nombre:
    Email: (no se publica el email)




  • SIGUENOS EN

    ARCHIVO

    Publicidad

    .