Recuperare i MetaDati di una tabella SQL

image

 

Nei miei post precedenti (Recuperare l'elenco dei database SQL, Recuperare l'elenco delle  tabelle presenti in un database SQL) ho descritto come poter accedere alle tabelle presenti in un database collegato ad un'istanza SQL. Adesso vedremo come recuperare i MetaDati delle colonne di una determinata tabella.

Conoscere i MetaDati delle colonne ci dà la possibilità di identificarne le proprietà come ad esempio: DataType, Ordinal, ColumnSize ecc... E' quindi possibile determinare anche se una colonna è Chiave Primaria (PK), Identity e se accetta valori NULL.

Per recuperare queste informazioni non è sufficiente eseguire un'unica query sulle tabelle di sistema ma bisogna eseguirne più di una perché i MetaDati sono suddivisi per tipologia su più tabelle (come ad esempio le chiavi primarie ed i vincoli di chiave esterna).

Per poter raggruppare facilmente tutte queste proprietà in un'unica DataTable, utilizzeremo l'oggetto SqlClient.SqlDataReader che eseguirà al posto nostro le query necessarie per recuperare le informazioni tramite il proprio metodo .GetSchemaTable.

        ' VB.
        ' Recupera le informazioni delle colonne.
        Dim strSql As String = "Data Source=MIO SERVER;Initial Catalog=MIO DATABASE;Integrated Security=True"
        Using cnn As New SqlClient.SqlConnection(strSql)
            ' Utilizza una stringa di connessione generica per recuperare tutti i records della 
            ' tabella Customers del database Northwind.
            Dim command As New SqlClient.SqlCommand("SELECT * FROM Customers", cnn)
            cnn.Open()
            ' Recupera le informazioni sule chiavi.
            Dim dr As SqlClient.SqlDataReader
            dr = command.ExecuteReader(CommandBehavior.KeyInfo)
            ' Recupera le informazioni sui MetaDati della tabella.
            Dim dtColumnsSchema As New DataTable
            dtColumnsSchema = dr.GetSchemaTable()
            dr.Close()
            cnn.Close()
            Me.DataGridView1.DataSource = dtColumnsSchema
        End Using
{ 
    // C#. 
    // Recupera le informazioni delle colonne. 
    string strSql = "Data Source=MIO SERVER;Initial Catalog=MIO DATABASE;Integrated Security=True"; 
    using (SqlClient.SqlConnection cnn = new SqlClient.SqlConnection(strSql)) { 
        // Utilizza una stringa di connessione generica per recuperare tutti i records della 
        // tabella Customers del database Northwind. 
        SqlClient.SqlCommand command = new SqlClient.SqlCommand("SELECT * FROM Customers", cnn); 
        cnn.Open(); 
        // Recupera le informazioni sule chiavi. 
        SqlClient.SqlDataReader dr; 
        dr = command.ExecuteReader(CommandBehavior.KeyInfo); 
        // Recupera le informazioni sui MetaDati della tabella. 
        DataTable dtColumnsSchema = new DataTable(); 
        dtColumnsSchema = dr.GetSchemaTable(); 
        dr.Close(); 
        cnn.Close(); 
        this.DataGridView1.DataSource = dtColumnsSchema; 
    } 
}

 

Da sottolineare che la procedura appena descritta è molto simile a quella utilizzata dai DataAdapter di Visual Studio durante il popolamento delle DataTable.

Ringrazio Alberto e Sabrina per l'aiuto che mi hanno dato.

 

Print | posted on mercoledì 23 luglio 2008 12.38

Feedback

No comments posted yet.

Your comment:





 
Please add 8 and 3 and type the answer here:

Copyright © Andrea Zingoni

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski