Condividi tramite


Creazione Database Azure ed utilizzo tramite C# (it-IT)


Finalità

In questo breve articolo vedremo come creare un database SQL sfruttando i servizi messi a disposizione dalla piattaforma cloud Microsoft Azure, per poi connetterci ad esso tramite codice C# per effettuare le normali operazioni di inserimento e reperimento dati.

Prerequisiti

Ai fini di replicare quanto verrà mostrato a seguire, è necessario disporre di:

  • Una sottoscrizione Azure (è disponibile un credito per testare i servizi)

Creare un database su Azure

Come prima cosa, visitiamo il sito https://portal.azure.com/. Verrà eseguito un redirect verso una pagina che ci consentirà di autenticarci al servizio, tramite indirizzo di posta e password con le quali avremo eseguito la registrazione. Ci troveremo quindi davanti alla dashboard di Azure, il pannello di controllo attraverso cui eseguire tutte le operazioni disponibili sul portale.

Si noterà, sulla barra laterale a destra, la voce «Database SQL». Clicchiamola per accedere alla relativa pagina di configurazione. Ovviamente vuota in partenza, nella parte in alto della pagina stessa è disponibile il tasto «Aggiungi». Premiamolo per iniziare a creare il nostro database.

Per l'esempio a seguire, creeremo un database di nome TechNet_Test. Come si noterà, è necessario definire alcuni parametri preliminari. Anzitutto, il nostro database dovrà ovviamente risiedere su un server, e - se non ne abbiamo già a disposizione - in questa sezione potremo creare un nuovo server, che - come si nota nella seguente immagine - sarà raggiungibile all'indirizzo <SERVER>.database.windows.net, dove <SERVER> sarà il nome che avremo scelto, con le relative credenziali. Esistono diversi piani tariffari per i database, ciascuno per prestazioni e risorse adatte. Nel nostro caso, trattandosi di un semplice test, selezioneremo il piano tariffario Basic, che consente database di dimensione fino a 2GB. Una volta terminato di specificare le opzioni desiderate, sarà sufficiente premere il tasto «Crea» per procedere con la creazione del database, e relativo server. Mantenendo il flag di «Aggiungi al dashboard» verrà creato sulla dashboard un utile link al database, che visualizzeremo in apertura del portale.

Attendiamo quindi il termine della creazione del nostro database. Un avviso sulla barra superiore del portale ci informerà dell'avvenuta creazione del nostro archivio dati. Si tratta di un'operazione che durerà alcuni minuti.

A questo punto, cliccando nuovamente su «Database SQL» vedremo nella lista il nostro database TechNet_Test. Cliccando su di esso verrà aperta la relativa finestra di parametrizzazione.

In essa, ci interessa particolarmente in questa sede la voce «Mostra stringhe di connessione al database», in quanto tale opzione esporrà le stringhe di connessione da utilizzare nei nostri programmi per poterci riferire all'istanza / database creati poc'anzi. Si noti inoltre, nella toolbar in alto, il tasto «Strumenti». In questa sede, esso espone il comando «Apri in Visual Studio», che consente di aprire l'istanza del server in Visual Studio per le operazioni di ordinaria manutenzione, da eseguirsi tramite script SQL, dei quali verrà effettuato upload.

Modifica database con Visual Studio

Utilizzando il comando «Apri in Visual Studio», verrà aperta un'ulteriore finestra, che ci permette di confermare l'operazione e configurare il firewall di Azure. Questo si rivela particolarmente importante per controllare gli accessi: se infatti la piattaforma non sarà stata configurata per consentire l'accesso di un determinato indirizzo, le varie chiamate all'istanza non avranno successo.

Clicchiamo quindi «Configurare il firewall», e andiamo a definire le regole che ci interessano. Nel caso in esame, definiamo una semplice regola di nome «Casa», che permette l'accesso al solo IP che stiamo utilizzando in questo momento. Una volta salvata la regola, possono essere richiesti alcuni minuti di elaborazione affinché sia possibile accedere effettivamente all'istanza.

A questo punto, potremo cliccare su «Apri in Visual Studio». Ci verranno richieste le credenziali impostate all'atto di creazione del server, digitando le quali avremo finalmente accesso al nostro database. A questo punto, vedremo il database TechNet_Test sulla barra laterale di sinistra, e potremo - cliccando con il tasto destro - eseguire l'operazione di aggiunta di una nuova tabella («Add New Table»). Noteremo quindi che l'IDE verrà predisposto per permetterci l'indicazione dei campi costituenti il database attraverso una comoda griglia, modificando la quale verrà modificato anche lo script che ne deriva, posizionato nella finestra più in basso.

Come si noterà in immagine, è stato scelto di creare una tabella di assoluta semplicità, a solo scopo dimostrativo. La tabella «Esempio» ha unicamente due colonne, denominate Id e Nominativo, la prima delle quali rappresenta la chiave primaria di tabella. Una volta soddisfatti della propria tabella, il tasto «Update» permetterà l'invio dello script ad Azure, su cui esso verrà eseguito, andando effettivamente a generare la nostra tabella.

Il pop-up riportato sopra ci mostra ciò che verrà eseguito lato server. Premendo il tasto «Update Database», si inizierà il colloquio tra il nostro client ed Azure.

Modifica database con Management Studio

Per la modifica del nostro database, non è indispensabile né vincolante l'utilizzo di Visual Studio. È ad esempio possibile utilizzare Management Studio, se preferiamo. In questo caso, sarà sufficiente avviare il programma, ed immettere le informazioni di login in modo che il nome server sia l'indirizzo del nostro server su Azure, il nome utente sia nella forma <USER>@<SERVER>, e la password sia quella impostata in fase di creazione server su Azure.

Eventuali modifiche in questa sede andranno fatte utilizzando la sintassi T-SQL dall'apposito menù «Nuova Query»

Accedere al database tramite codice C#

Vediamo ora alcuni semplicissimi snippet di codice per effettuare una connessione verso il nostro database Azure. Sfrutteremo il namespace System.Data.SqlClient, che mette a disposizione efficaci classi adatte a questo scopo.

Realizzare una connessione

Creiamo un nuovo progetto WinForms C# (qualsiasi altro tipo di progetto C# andrà ugualmente bene). Lo snippet che realizza una semplice apertura e successiva chiusura del nostro database può essere rappresentato dal seguente:

using System;
using System.Data.SqlClient;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial  class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void  Form1_Load(object  sender, EventArgs e)
        {
            SqlConnection connessione = new  SqlConnection("Server=tcp:XXXXX.database.windows.net,1433;Database=TechNet_Test;User ID=XXXXXX;Password={your_password_here};Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;");
            connessione.Open();
 
            connessione.Close();
        }
    }
}

È cioè sufficiente dichiarare un oggetto di classe SqlConnection, inizializzandolo con la stringa di connessione che Azure denomina «ADO.NET», ovviamente avendo cura di inserire il corretto nome server, nome utente, e password. Lanciando questo programma, verrà effettuata una chiamata alla piattaforma, l'apertura del database TechNet_Test, e successiva chiusura.

Inserire un record

Per inserire un record nella nostra tabella, utilizzeremo la classe SqlCommand, in congiunzione con la SqlConnection già evidenziata. Stante la struttura di tabella vista sopra, possiamo inserire un record nella tabella Esempio utilizzando un costrutto di questo tipo:

SqlConnection connessione = new  SqlConnection("Server=tcp:XXXXX.database.windows.net,1433;Database=TechNet_Test;User ID=XXXXXX;Password={your_password_here};Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;");
connessione.Open();
 
SqlCommand cmd = new  SqlCommand(@"INSERT INTO Esempio (Id, Nominativo)
                                  VALUES (@Id, @Nominativo)", connessione);
cmd.Parameters.Add(new SqlParameter("Id", 1));
cmd.Parameters.Add(new SqlParameter("Nominativo", "MARIO ROSSI"));
cmd.ExecuteNonQuery();
 
connessione.Close();

Viene cioè aperta la connessione, come di consueto, e poi inizializzata la variabile appartenente alla classe SqlCommand utilizzando una istruzione T-SQL adatta. Si noti l'utilizzo della classe SqlParameter per passare alla query i parametri in modo protetto, onde evitare problematiche di escaping o di SQL injection. Il metodo ExecuteNonQuery() richiede l'esecuzione del comando indicato senza restituzione di valori di ritorno.
Infine, terminiamo la connessione.

Leggere il contenuto della tabella

Vogliamo ora verificare cosa sia stato scritto sulla nostra tabella remota. Scriviamo quindi uno snippet che, aprendo la connessione, esegua una selezione dei record di tabella senza discriminazione, e per ciascuno accorpi i dati di colonna in un'unica stringa, da esporre mediante MessageBox.

Possiamo realizzare tale funzionalità nel modo seguente:


SqlConnection connessione = new  SqlConnection("Server=tcp:XXXXX.database.windows.net,1433;Database=TechNet_Test;User ID=XXXXXX;Password={your_password_here};Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;");
connessione.Open();
 
SqlCommand cmd = new  SqlCommand(@"SELECT * FROM Esempio", connessione);
SqlDataReader dr = cmd.ExecuteReader();
 
if (dr.HasRows)
{
     while (dr.Read())
     {
        String retVal = dr.GetInt32(0).ToString() + " " + dr.GetString(1);
        MessageBox.Show(retVal);
     }
}
dr.Close();
connessione.Close();

 
Ancora, apriamo la connessione e dichiariamo un comando, questa volta di selezione. Nel caso in esame, l'esecuzione del comando restituirà certamente dei valori che vorremo trattare. Per questo motivo, utilizzeremo il metodo ExecuteReader(), che restituisce un oggetto di classe SqlDataReader, utile alla navigazione dei dati restituiti. Come prima cosa, verifichiamo che alla restituzione dei record, la struttura abbia effettivamente delle righe da mostrare (proprietà dr.HasRows, booleana). In caso affermativo, eseguiamo il metodo Read(), anch'esso booleano, che ritorna il valore True finché vi sono righe da leggere, e False quando terminano. In base al valore di ritorno di tale metodo, imbastiamo un loop, internamente al quale andremo a trattare i valori che ogni singola esecuzione del metodo Read() ci mette a disposizione.

Si noti l'utilizzo dei metodi GetInt32 prima, e GetString poi, nel comporre la stringa retVal. Tali metodi permettono di estrarre un valore di colonna, a seconda del numero ordinale passato al metodo stesso. Dal momento che, nella nostra tabella Esempio, il primo campo Id è un intero, mentre il secondo - Nominativo - è una stringa, utilizzeremo rispettivamente i metodi GetInt32 con indice zero, e GetString con indice uno, per leggere correttamente i valori.

Composta la stringa, la emettiamo a video mediante una MessageBox. Il risultato in esecuzione sarà il seguente:

Conclusione

In questo articolo abbiamo velocemente visto le basi relative all'utilizzo dei database SQL su Azure, in connessione agli strumenti messi a disposizione da Microsoft così come a codice sviluppato ad hoc. Il lettore è invitato ad esplorare ulteriormente le potenzialità degli strumenti elencati per creare le soluzioni di cui necessita, sfruttando inoltre la bibliografia a seguire per gli approfondimenti del caso.

Bibliografia

Altre lingue

Il presente articolo è disponibile anche nelle seguenti localizzazioni: