IntroduzioneIn quest'articolo esamineremo l'oggetto Query, che ci consentirà di risolvere la quasi totalità di necessità relative alle interrogazioni sui dati.
RequisitiTutti i software qui elencati sono gratuiti.
Microsoft Visual Web Developer 2008 Express (va bene anche la versione 2005).
Link:
http://www.microsoft.com/express/download/Microsoft SQL Server 2005 Express.
Link:
http://www.microsoft.com/express/sql/download/default.aspxMicrosoft SQL Server Management Studio Express (facoltativo).
Link:
http://www.microsoft.com/express/sql/download/default.aspxSubsonic (versione attuale: 2.1.0 beta 1).
Link:
http://www.codeplex.com/subsonic/Release/ProjectReleases.aspx?ReleaseId=10395Codice di esempio allegatoE' possible scaricare a
questo link il codice di esempio allegato all'articolo.
PremessaFino alla versione 2.0.3 Subsonic non supporta le join tra tabelle. Ok, niente panico. Questa caratteristica (assieme a molte altre) è supportata a partire dalla versione 2.1, attualmente ancora in beta. Per il momento tralasceremo queste nuove funzionalità, che saranno oggetto di discussione di un prossimo articolo.
Creazione dell'oggetto QueryPer la creazione dinamica di costrutti SQL per interrogare la base dati Subsonic mette a disposizione l'oggetto Query. Per la creazione dell'oggetto è fornito il metodo "CreateQuery". Ecco un esempio:
Subsonic.Query QDati = Ordini.CreateQuery();
In alternativa è possibile creare l'oggetto passando come parametro il nome della tabella o lo schema:
Subsonic.Query QDati = new Subsonic.Query(Ordini.TableName);Subsonic.Query QDati = new Subsonic.Query(Ordini.GetTableSchema());Esecuzione dell'oggetto QueryIl metodo "Execute" consente di eseguire la query e non restituisce nulla:
QDati.Execute();Il metodo "ExecuteDataset" restituisce un dataset:
GridView1.DataSource = QDati.ExecuteDataset();Il metodo "ExecuteReader" restituisce un datareader:
GridView1.DataSource = QDati.ExecuteReader();Il metodo "ExecuteScalar" restituisce un singolo valore:
Label1.Text = QDati.ExecuteScalar().ToString();Filtri e ordinamentiLa proprietà "SelectList" è utilizzata per limitare il numero di campi da considerare nell'estrazione dei dati. Vediamo la struttura delle tabelle:
Ecco un esempio di utilizzo della "SelectList":
myQuery.SelectList = ss_ita_demo.Prodotti.Columns.Descrizione + "," + ss_ita_demo.Prodotti.Columns.UnitsInStock;Il metodo "AddWhere" consente di inserire una condizione nella query. Vediamo un esempio di utilizzo:
myQuery.AddWhere(ss_ita_demo.Prodotti.Columns.UnitsInStock, SubSonic.Comparison.Equals, 300);Allo stesso modo possiamo utilizzare il metodo "AddBetweenValues" per estrarre i dati che rientrano in un determinato intervallo:
myQuery.AddBetweenValues(ss_ita_demo.Prodotti.Columns.UnitsInStock, 200, 300);Risulta altrettanto semplice assegnare un ordinamento tramite il metodo "OrderBy".
Ordinamento ascendente:
myQuery.OrderBy = SubSonic.OrderBy.Asc(ss_ita_demo.Prodotti.Columns.Descrizione);Ordinamento discendente:
myQuery.OrderBy = SubSonic.OrderBy.Desc(ss_ita_demo.Prodotti.Columns.Descrizione);Per limitare il numero di record che la query restituisce esiste la proprietà "Top". Ecco un esempio:
myQuery.Top = "5";E' possibile gestire la paginazione tramite le proprietà "PageIndex" e "PageSize". Un esempio di utilizzo è riportato nel codice allegato all'articolo. Nel caso specifico, è stato creato un vero e proprio controllo che estende la GridView integrando la paginazione con tutti i pulsanti e le indicazioni necessarie.
Funzionalità particolariIl metodo dell'oggetto query "GetCount"consente di ottenere il numero di record estratti. Ecco un esempio di utilizzo:
int num = myQuery.GetCount(ss_ita_demo.Prodotti.Columns.Descrizione);Il metodo "GetSql" consente di mostrare a video l'istruzione SQL utilizzata dalla query per estrarre i dati. Ecco un esempio:
lDati.Text = myQuery.GetSql();ConclusioniIn questo articolo abbiamo visto l'utilizzo dell'oggetto Query come strumento per effettuare interrogazioni sui dati. In futuro, non appena la versione 2.1 di Subsonic uscirà dalla fase di beta, verrà rilasciato un articolo con le nuove caratteristiche dell'oggetto Query.