Una semplice applicazione con Visual Express e Sql Server 2005 Express
a cura di Luciano Bastianello (requisiti: nessuno)

Premessa
Com'è noto, la serie Express 2005 può utilizzare come fonte per il design grafico dell'interfaccia solo Access (2007 escluso) e Sql Express 2005.

Ovviamente, come qualsiasi altra applicazione .NET, è possibile connettere "da codice" qualsiasi database che disponga di una interfaccia utilizzabile da .NET.

Questo esempio dimostra come si può utilizzare Visual Express 2005 per disegnare la propria applicazione con Sql Server 2005.

Sfruttiamo gli automatismi
Il tutto parte con la consueta creazione di un nuovo progetto Windows Forms.

Prendiamo il file del nostro database Sql Server (mdf) e facciamo copia-incolla sul progetto (sì, proprio sul progetto) - se abbiamo deciso di utilizzare Access questo è il momento per farlo!.

Dopo le prime prove, quando il collegamento al database funziona, ricordarsi di togliere, sulle proprietà del database, la 'copia ad ogni compilazione'.

La copia del database sul progetto fa scattare il wizard che disegna il file xsd per la definizione del DataSet tipizzato.

Scegliamo la table Customers e clicchiamo su Fine.


Successivamente compiliamo il nostro progetto, per dar modo al Designer di aggiungere gli oggetti DataSet e TableAdapter generati dal wizard tra i componenti personalizzati (DataBindingExpress).



Tra i controlli disponibili selezioniamo ed aggiungiamo alla nostra form un controllo BindingSource e lo configuriamo come indicato nella figura accanto.

Questo determina l'aggiunta del customersTableAdapter e del NorthwndDataset.
Il controllo BindingSource è dedicato al mantenimento del collegamento tra la fonte dati locale (dataset) e i controlli a video.





Aggiungiamo anche un controllo BindingNavigator.
Questo controllo consente di gestire le varie azioni che si possono intraprendere sui dati come lo spostamento del puntatore della riga corrente, l'aggiunta e l'eliminazione di righe dal dataset.

Impostiamo le sue proprietà come indicato accanto.

Alla fine dovremmo avere gli oggetti:

Aggiungiamo un controllo Label e due TextBox (IdTextBox e nameTextBox) ed impostiamo le proprietà come indicato nelle figure seguenti:
Aggiungiamo anche un controllo DataGridView,
ed impostiamone le proprietà come indicato nella figura sotto:
Il controllo BindingNavigator non aggancia i comandi per l'aggiornamento del database, né per la ricarica del dataset dal database.
Ho aggiunto pertanto due ToolStripButton e le relative immagini.
La form nell'IDE diventa simile a questa (gli ultimi due Button sul BindingNavigator sono quelli aggiunti)

Compiliamo ed eseguiamo il progetto. Non dovrebbero esserci problemi o errori perché non abbiamo ancora aggiunto alcuna riga di codice.

I Button aggiunti ancora non funzionano, vero?
Infatti BindingNavigator si è agganciato alla DataTable ed è in grado di fare "da solo" navigazione, aggiunta e cancellazione righe (i comandi sono "embedded" nel controllo).
Invece i "miei" Button devono essere configurati e gestiti.
Facendo doppio click su ciascuno di essi, creiamo due nuovi gestori di evento click: uno per il salvataggio dei dati, l'altro per il riciclo.

Salvataggio dati
Il metodo preposto al salvataggio dei dati e all'aggiornamento dell'origine dati è l'Update del DataAdapter; nel nostro caso, il metodo è esposto dal customerTableAdapter "specializzato" per la tabella Customers del DataSet tipizzato. Quindi, nel codice per il salvataggio dati, inseriamo:

    private void ToolStripButton1_Click(object sender, EventArgs e)
    {
      // update del dataset e aggiornamento del database
      this.bindingSource1.EndEdit();
      this.customersTableAdapter.Update(this.nORTHWNDDataSet.Customers);
    }
  Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
                                                                    Handles ToolStripButton1.Click
    Me.BindingSource1.EndEdit()
    Me.CustomersTableAdapter.Update(Me.NORTHWNDDataSet.Customers)
  End Sub

Ricarica dati
Nel gestore dell'altro pulsante inseriamo questo codice:

    private void ToolStripButton2_Click(object sender, EventArgs e)
    {
      // refill del dataset
      this.nORTHWNDDataSet.Customers.Rows.Clear();
      this.customersTableAdapter.Fill(this.nORTHWNDDataSet.Customers);
    }
  Private Sub ToolStripButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
                                                                    Handles ToolStripButton2.Click
    Me.NORTHWNDDataSet.Customers.Rows.Clear()
    Me.CustomersTableAdapter.Fill(Me.NORTHWNDDataSet.Customers)
  End Sub

A questo punto il nostro progetto è del tutto funzionante. Per una configurazione standalone con Sql Express locale, va più che bene. Il database, a partire dalla cartella bin, verra "attaccato" al server e scollegato alla chiusura dell'applicazione (User Instance).

Invece, per lavorare con Sql Server mediante il 'servizio' Server, è necessario apportare delle variazioni al Setting (si trova tra le proprietà del progetto):

Ovviamente al posto di CYANO (il mio Windows 2003 Server dove gira Sql Server 2005) dovrete mettere il nome del vostro server :)).
Consiglio di usare prudenza come ho fatto io, che ho aggiunto una nuova stringa, in cui ho salvato la stringa originale prima di modificare la stringa di connessione.

Conclusione, sorgenti, feedback
Spero che questo articolo sia utile per capire come sia semplice, in fondo, collegare una applicazione Visual Express (VB o C#) a Sql Server Express (per Access le differenze sono minime).
I sorgenti degli esempi per questo articolo sono scaricabili dall'area download del sito.
Per feedback potete scrivere direttamente sul blog