Pagine

giovedì 7 marzo 2013

SQL Server 2012 : LocalDB

Si sa dai....
Ai Dev non piace assolutamente configurare e manutenere un RDBMS... :-)
SQL Server 2012 LocalDb esaudisce i desideri degli sviluppatori...
Perché installare SQL Server Express per avere un servizio RDBMS se poi l'utilizzo che ne si fa è saltuario e molto limitato ?

LocalDb è una modalità particolare d'esecuzione di SQL Server Express rivolta agli sviluppatori per le attività di programmazione e debug ma che potrebbe essere anche utilizzata da applicazioni single user che necessitano di una base dati per poter funzionare.
Il vantaggio rispetto alla edizione SQL Server Express ??
Bhè... L'utilizzatore non deve preoccuparsi dell'avvio del servizio, della configurazione etc...

Se si sviluppa utilizzando Visual Studio 2012 viene installata automaticamente, altrimenti è necessario scaricare il setup ed eseguirne l'installazione.

Il Database poi sarà un vero e proprio DB Sql Server a tutti gli effetti. Sarà composto da file dati e file Log, potremo usare viste, stored procedure, functions, trigger etc...

Ma le applicazioni come fanno a connettersi al Db se non ho a disposizione un'istanza Express ?
Quando l'applicazione che necessita dei dati invoca una connessione viene avviato un processo di SQL Server LocalDb che farà da "gestore" per il Db.
Quando poi l'applicazione chiamante sarà chiusa dall'utente, automaticamente, dopo qualche minuto verrà terminato anche il processo di SQL Server LocalDb.

Vediamo un esempio.

Utilizzando Visual Studio 2012 genero un nuovo progetto Windows form.



Ho bisogno ora di creare un Db a cui la mia applicazione possa fare riferimento, quindi:
View->Sql Server Object Explorer



Il mio progetto ha già a disposizione un'istanza su cui appoggiarsi per reperire i dati del Db.
L'istanza si chiama (localdb)\Projetcs e viene creata con il setup di Visual Studio 2012 SSDT.

Ora devo creare il Db, Tasto Dx sulla folder Databases e Add New Database



Devo solo specificare il nome e la locazione dei file *.mdf e *.ldf

Ora devo generare la struttura delle tabelle, delle view, delle stored procedure etc... all'interno del Db.
Tasto Dx su Tables e Add New Table



Una volta definita la struttura devo fare l'Upload dell'oggetto nel DB (tasto Upload in alto a sx) e mi appare una finestra di preview delle modifiche.



Confermiamo l'update e dell'oggetto viene fatto il deploy nel DB.



Possiamo anche inserire dei dati nella tabella appena creata
Tasto Dx sulla tabella Customers e View Data



Il nostro Db è ora pronto all'uso !!!

Se proprio si vogliono fare le cose in modo preciso sarebbe stato ottimale utilizzare un progetto di tipo SQL Server Database Project in modo da poter gestire il versioning degli oggetti etc...

Ora possiamo occuparci dell'applicazione Windows Form che dovrà leggere ed aggiornare i dati della tabella Customers.
Il codice dell'applicazione lo potete trovare qui. E' un esempio della msdn.

L'unica modifica che ho apportato è il salvataggio della connectionstring nell'app.config dell'applicazione.
Per il mio progetto in fase di debug sarà :


    
  

E qui dove la passo all'applicazione per connettermi al DB e mostrare i dati

String connectionString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString();

Proviamo ad eseguirla ed a leggere i dati dal nostro Db agganciato all'istanza LocalDb\Projects



Inserisco una riga



Perfetto... Funziona...
Ora la devo poter utilizzare su un'altra macchina che non dispone ne di SQL Server ne di Visual Studio.
Come dicevo prima è necessario scaricare il package di setup del localDb ed eseguirlo sul client di destinazione

Il secondo step è copiare l'applicazione, i file del Db sul client ed infine configurare l'app.config facendo in modo che utilizzi l'istanza LocalDb


    
  

Come vedete si fa riferimento all'istanza (Localdb)\v11.0 e viene anche fornito il path al file mdf.
In questo modo viene avviato il processo di SQL Server LocalDb e viene creato il DB ApplicationDb agganciando il file mdf specificato.

Eseguo l'applicazione.

Avendo copiato il db dalla macchina di sviluppo ho a disposizione anche le righe inserite a scopo di test.



Ne inserisco una nuova



Sul Client, quando si apre la connessione al Db viene attivato un processo di sqlservr.exe




Il bello è che non ci si deve preoccupare della sua chiusura !!! Dopo pochi minuti dalla chiusura della connessione anche il processo sqlservr.exe sarà automaticamente terminato.
Penso che LocalDb sia un ottima opzione per quelle piccole applicazioni single user che vengono utilizzate saltuariamente.
Ciao

Luca

1 commento: