Saturday, January 19, 2008

Informazioni sullo Schema

. Saturday, January 19, 2008

In ADO.NET 2.0 per recuperare informazioni dello schema da un oggetto SqlConnection è estremamente semplice, grazie all'uso del metodo GetSchema:

   1: Imports System.Data
   2: Imports System.Data.SqlClient
   3: .....
   4: Dim connectionSQL As String = "Data Source=.;Initial Catalog=aspnetdb;Integrated Security=True"
   5:  
   6: Dim dt As DataTable = New DataTable()
   7: Using sqlCon As SqlConnection = New SqlConnection(connectionSQL)
   8:     sqlCon.Open()
   9:     dt = sqlCon.GetSchema(SqlClientMetaDataCollectionNames.Tables)
  10:     sqlCon.Close()
  11: End Using

Da sottolineare l'uso dell'enumeratore SqlClientMetaDataCollectionNames che SQL Client .Net mette a disposizione per fornire l'insieme degli schemi supportati.
Nell'esempio mostrato otteniamo le tabelle disponibili nel db, ma possiamo anche conoscere la lista degli utenti con SqlClientMetaDataCollectionNames.Users oppure le colonne chiavi con SqlClientMetaDataCollectionNames.IndexColumns ecc.
Volendo anche con ADO.NET 1.1 possiamo conoscere queste informazioni anche se il metodo GetSchema è stato introdotto con il .NET Framework 2.0. Ma come?
Molto semplice basta dare uno sguardo al Profiler di SQL Server quando viene invocato il metodo GetSchema:
GetSchema1Come si può vedere vengono eseguite delle query in tabelle di sistema, a questo punto possiamo scrivere il codice per ADO.NET 1.1.




   1: string connectionSQL = "Data Source=.;Initial Catalog=aspnetdb;User ID=user;Password=password";
   2: DataTable dt = new DataTable();
   3: using( SqlConnection sqlCon = new SqlConnection( connectionSQL))
   4: {
   5:   sqlCon.Open();
   6:   SqlDataAdapter sqlDa = new SqlDataAdapter( 
   7: "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE from INFORMATION_SCHEMA.TABLES",
   8:   sqlCon);
   9:   sqlDa.Fill( dt);
  10:   sqlCon.Close();
  11: }
  12: DataGrid1.DataSource = dt;
  13: DataGrid1.DataBind();

Il risultato del bind con la lista delle tabelle:
GetSchema2

2 commenti:

Anonymous said...

Ottimo articolo e blog.
Ti sei guadagnato un feed!
:-)

Pierluca said...

...grazie per i complimenti returncode ;)

Post a Comment