Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1909, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Utilizzare LINQ con SQL Compact Edition 3.5

LINQ-to-SQL non è prerogativa esclusiva di SQL Server (full o Express), ma può essere utilizzato anche nei confronti di database basati su SQL Compact Edition 3.5.

 

Una differenza non molto simpatica è che, nell’utilizzo di quest’ultimo, a differenza di quanto abbiamo visto finora con SQL classico, l'Object Relational Designer di Visual Studio 2008 non supporta il drag’n’drop di oggetti del database sulla superficie delle classi LINQ-to-SQL. Ciò significa che il file di mapping andrebbe generato a manina, con tutta la fatica che ne consegue.

 

Fortunatamente esiste un tool, chiamato SqlMetal.exe, fornito con Windows SDK per Visual Studio 2008 (che viene installato con l'ambiente). Questo tool genera un file di mapping di tipo .dbml a partire dal database specificato e che può essere successivamente incluso nella soluzione e trattato come sempre.

Quindi prendiamo in considerazione il database Northwind.sdf, edizione per SQL Compact del noto database SQL. Viene fornito con Visual Studio 2008 e lo trovate nella cartella C:\Programmi\Microsoft SQL Server Compact Edition\v3.5\Samples.

 

SqlMetal è un tool da usare dalla riga di comando. Pertanto, è necessario avviare il prompt dei comandi di Visual Studio (per un discorso legato alle variabili d’ambiente) e posizionarsi nella cartella ove risiede il database. La riga di comando da digitare è la seguente:

 

SqlMetal.exe Northwind.sdf /dbml:Northwind.dbml

 

SqlMetal offre diverse opzioni da utilizzare, quelle sopra specificate indicano che il file di mapping va generato a partire dal file indicato e che deve confluire nel file specificato tramite l'opzione /dbml. Altre opzioni consentono di specificare il nome del database presente in un determinato server o l’utilizzo specifico di SQL Express ma per questo vi rimando alla documentazione MSDN.

 

Fatto questo, si apre Visual Studio 2008 (in questo esempio utilizzerò Visual Basic Express) e si crea una normale applicazione Windows Forms. Utilizzando le modalità viste in altre sedi, stavolta va stabilita una connessione al database Northwind.sdf. Poi si aggiunge alla soluzione il file .dbml creato dal nostro tool (comando Aggiungi elemento esistente del menu Progetto), così come in figura:

 

 

Se fate doppio clic sul file appena aggiunto, verrà attivato il designer che già conoscete, con la differenza che le altre volte decidevate in anticipo quali tabelle trascinare sulla sua superficie, mentre in questo caso SqlMetal ha “mappato” tutte le tabelle del database:

 

 

Ovviamente potete rimuovere quelle che non interessano, per questo esempio lascerò le sole tabelle Customers e Orders che, tra l’altro, sono relazionate tra loro.

 

Da questo momento in poi segue una serie di passaggi perfettamente identici a quelli visti nell’ambito dei database .mdf in LINQ. Bisogna, pertanto, aggiungere la sorgente dati, nella stessa identica maniera con cui agivamo utilizzando un database SQL normale, facendo riferimento alla classe Customers che rappresenta l’omonima tabella:

 

 

Il passaggio successivo è quello di trascinare, dalla finestra Origini dati, le due tabelle sull’oggetto form della nostra applicazione, utilizzando, quindi, una modalità ben nota. Dal lato del codice, si farà ancora riferimento al DataContext:

 

    'Si istanzia un oggetto che è sempre di tipo

    'DataContext anche se si chiama in modo diverso

    'da quanto visto in altri esempi

    Private dc As New Northwind("Data Source=C:\Users\Alessandro\Documents\Northwind.sdf")

 

Al di là del nome, è importante notare come in questo caso il costruttore riceva, come argomento, la stringa di connessione. In LINQ-to-SQL, come abbiamo visto altre volte, l’IDE genera automaticamente, anche un file app.config contenente la stringa in questione, mentre questo passaggio va eseguito manualmente nell’ambito di SQL Compact. In realtà la stringa di connessione può essere specificata anche tramite alcuni argomenti della riga di comando di SqlMetal ma ovviamente questo è solo un mero esempio e le modalità di specifica della stringa di connessione cambieranno a seconda dello scenario in cui state operando.

 

Poi si associa la sorgente dati ai controlli:

 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

 

        CustomersBindingSource.DataSource = dc.Customers

 

Oppure si potrebbe scrivere una query che  estragga, ad esempio, i soli clienti residenti in Messico:

 

        Dim data = From customer In dc.Customers _

                 Where customer.Country = "Mexico" _

                 Order By customer.CompanyName _

                 Select customer

 

        CustomersBindingSource.DataSource = data

    End Sub

 

Avviando l'applicazione il risultato sarà il seguente:

 

 

Qualunque sia l’azione che deciderete di intraprendere nell’interrogare i dati, le modalità utilizzate verso i database SQL Compact saranno identiche a quelle viste nell’ambito degli altri database SQL, con grandi risultati in termini di efficienza e rapidità di sviluppo.

 

Solo una precisazione: SQL Compact Edition 3.5 non è parte di .NET Framework 3.5, quindi dovrete ricordare di includerlo nelle procedure di distribuzione come prerequisito.

 

Alessandro

Print | posted on martedì 15 aprile 2008 20:06 | Filed Under [ Visual Basic LINQ ]

Powered by:
Powered By Subtext Powered By ASP.NET