.NET: effettuare query SQL su DataTable in memoria



Scenario: realizzazione di un sistema di 'aggregazione dati' in grado di caricare in memoria dati da fonti diverse (Db SQLServer/Oracle/MySQL, files Excel, Db Access) ed utilizzarli per realizzare semplici 'reports'.

Riempire di dati le DataTables e' cosa da poco, aggregarle all'interno di un DataSet e' ancora piu' semplice, comincia a saltar fuori qualche difficolta' quando arriva il momento di permettere agli utenti diĀ  'interrogare' il DataSet utilizzando una sintassi 'SQL-Like': soluzione ottima per l'utente finale con una minima infarinatura di Structured Query Language, difficile da realizzare senza scomodare LINQ e il Framework 3.5.

Per fortuna ci viene incontro Emmet Gray, ottimo programmatore che ha realizzato una classe che implementa un engine SQL minimale utilizzabile sui DataSet: SQL_Engine.

L'utilizzo di tale classe e' straordinariamente semplice: una volta riempito il nostro DataSet con le tabelle contenenti i dati da interrogare, basta instanziare l'oggetto passando al constructor il dataset

[sourcecode language='vb']

Dim sc As New SQL_Engine.SelectCommand(ds)

[/sourcecode]
e richiamare il metodo 'Execute' (passando come parametro la query da eseguire) , che si occupera di restituire una DataTable contenente i risultati

[sourcecode language='vb']

Dim dt As DataTable = sc.Execute(query)

[/sourcecode]

Published: February 02 2009

  • category: