In questo articolo vedremo come utilizzare la libreria per la gestione del database PostgreSql tramite il provider Npqsql, che fornisce le classi per gestire tale database.
Dopo l’articolo sul database visibile qui https://www.iprogrammatori.it/articoli/programmazione/art_il-database-postgresql_1563.aspx nel quale sono state fornite le basi per l’utilizzo di questo database open source, in questo nuovo articolo vedremo come effettuare le query di selezione, inserimento, modifica e cancellazione dei record tramite il linguaggio di programmazione VB.Net e C#.
La sintassi sarà simile a quella di Ado.Net quindi per chi ha già dimestichezza con questa tecnologia si troverà molto bene.
Creazione del progetto
Dopo aver creato un nuovo progetto di tipo “Windows Application” secondo il linguaggio di proprio interesse, aggiungiamo nella nostra Windows Form, ossia nella finestra, 4 bottoni che permetteranno rispettivamente di effettuare le seguenti azioni, seleziona dei dati, inserimento, modifica e cancellazione dei record.
Dopo aver posizionato i controlli di tipo pulsante dobbiamo aggiungere al progetto il componente per la gestione del database in particolare il provider.
Dal menu strumenti, selezioniamo la voce “Gestione pacchetti Nuget” e nel sottomenu selezioniamo la voce “Gestione pacchetti Nuget per la soluzione ...” .
Nella finestra che viene aperta (figura 1) in alto a destra, digitiamo “PostgreSQL” in modo che ci fornisce i vari componenti che possiamo installare.
Figura 1 – l’installazione del provider Npqsql
Selezioniamo il componente “Npqsql” e facciamo click sul pulsante “Installa” in questo modo verranno installate le dll per la gestione del database.
Diamo per scontato la creazione di una tabella con dei campi, e valorizzata con i vari dati.
Aggiungiamo come riferimento al progetto, la dll per la gestione dei file di configurazione, in particolare aggiungiamo come riferimento il “System.Configuration”.
Stesura del codice
Vediamo il codice per estrapolare i dati dal database PostgreSQL, in particolare vedremo le operazioni più comuni, come lettura, inserimento dati, modifica dei dati e cancellazione, le più comuni operazioni che si usano nei vari gestionali.
Dopo aver creato una tabella che consigliamo di scriverla tutta in minuscola, aggiungiamo dei campi e valorizziamoli, terminato ciò dobbiamo scriver le prime istruzioni .Net.
Dobbiamo impostare nel file di configurazione, un tag per la connessione al database (connectionstring)
Qui di seguito il tag per la connessione al database PostgreSQL
<connectionStrings>
<add name="PGConn" connectionString='Server=127.0.0.1;User Id=nomeUtente;Password=Password;Database=NomeDatabase;' />
</connectionStrings>
Per il primo pulsante, il quale permetterà la selezione dei dati dobbiamo scrivere il codice per estrapolare i dati dalla tabella. Facciamo doppio click sul pulsante e nella modalità di visualizzazione codice scriviamo lo spazio dei nomi per la gestione del database PostgreSQL.
Sopra ad ogni dichiarazione scriviamo il seguente frammento di codice.
VB.Net
Imports Npgsql
C#
using Npgsql;
Ora dovremmo scrivere il codice per estrapolare i dati, per coloro che hanno scritto programmi in passato con Ado.Net troveranno famigliare la sintassi di codice per questo database, perché avremmo in questo caso le classi per la gestione della connessione (NpgsqlConnection) simile a quelle di ado.Net, per l’esecuzione delle query(NpgsqlCommand), e per il risultato della query (NpgsqlDataReader).
Qui di seguito il frammento di codice delle suddette operazioni.
VB.Net
Private Sub btnPostgreSQL_Click(sender As Object, e As EventArgs) Handles btnPostgreSQL.Click
Dim connString As String = System.Configuration.ConfigurationManager.ConnectionStrings("PGConn").ConnectionString
Using conn As New NpgsqlConnection(connString)
Try
conn.Open()
Using cmd As New NpgsqlCommand("Select * from test", conn)
Using reader As NpgsqlDataReader = cmd.ExecuteReader()
While reader.Read()
MessageBox.Show(reader("nomecampo").ToString())
End While
End Using
End Using
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Using
End Sub
C#
private void btnPostgreSQL_Click(object sender, EventArgs e)
{
string connString = System.Configuration.ConfigurationManager.ConnectionStrings["PGConn"].ConnectionString;
using (var conn = new NpgsqlConnection(connString))
{
try
{
conn.Open();
using (NpgsqlCommand cmd = new NpgsqlCommand("select * from test ", conn))
using (NpgsqlDataReader reader = cmd.ExecuteReader())
while (reader.Read())
MessageBox.Show(reader["nomecampo"].ToString());
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
Passiamo in visualizzazione designer e per il secondo pulsante, scriviamo il codice per l’inserimento dei dati. In questo caso tramite la classe Npqsqlcommand, scriviamo il codice sql per l’inserimento dei dati, passando i parametri, che verranno impostati nella proprietà “Parameters”.
Qui di seguito si riporta il frammento di codice per entrambi i linguaggi.
VB.Net
Private Sub BtnInserimento_Click(sender As Object, e As EventArgs) Handles BtnInserimento.Click
Dim connString As String = System.Configuration.ConfigurationManager.ConnectionStrings("PGConn").ConnectionString
Using conn As New NpgsqlConnection(connString)
Try
conn.Open()
Using cmd As New NpgsqlCommand("INSERT INTO test (nomecampo2, nomecampo, id) VALUES (@paramCampo2, @paramnomecampo, @paramId)", conn)
cmd.Parameters.AddWithValue("@paramCampo2", "valore10")
cmd.Parameters.AddWithValue("@paramnomecampo", "Emanuele4")
cmd.Parameters.AddWithValue("@paramId", 5)
Dim inserimenti As Integer = cmd.ExecuteNonQuery()
End Using
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Using
End Sub
C#
private void BtnInserimento_Click(object sender, EventArgs e)
{
string connString = System.Configuration.ConfigurationManager.ConnectionStrings["PGConn"].ConnectionString;
using (var conn = new NpgsqlConnection(connString))
{
try
{
conn.Open();
using (var cmd = new NpgsqlCommand("INSERT INTO test (nomecampo2, nomecampo, id) VALUES (@paramCampo2, @paramnomecampo, @paramId)", conn))
{
cmd.Parameters.AddWithValue("@paramCampo2", "valore1");
cmd.Parameters.AddWithValue("@paramnomecampo", "Emanuele");
cmd.Parameters.AddWithValue("@paramId", 1);
int inserimenti = cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
Passiamo in visualizzazione dei controlli, e scriviamo il codice per la modifica dei dati, doppio click al terzo pulsante ed in visualizzazione scriveremo il codice simile a quello per inserimento, con la sola differenza dell’istruzione SQL che anziché essere una di tipo “Insert” sarà “Update”, ma il resto del codice rimane uguale.
Qui di seguito il frammento di codice per entrambi i linguaggi.
VB.Net
Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
Dim connString As String = System.Configuration.ConfigurationManager.ConnectionStrings("PGConn").ConnectionString
Using conn As New NpgsqlConnection(connString)
Try
conn.Open()
Using cmd As New NpgsqlCommand("Update test set nomecampo2=@paramCampo2, nomecampo=@paramnomecampo where id=@paramId", conn)
cmd.Parameters.AddWithValue("@paramCampo2", "valore")
cmd.Parameters.AddWithValue("@paramnomecampo", "Emanuele")
cmd.Parameters.AddWithValue("@paramId", 5)
Dim inserimenti As Integer = cmd.ExecuteNonQuery()
End Using
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Using
End Sub
C#
private void btnUpdate_Click(object sender, EventArgs e)
{
string connString = System.Configuration.ConfigurationManager.ConnectionStrings["PGConn"].ConnectionString;
using (var conn = new NpgsqlConnection(connString))
{
try
{
conn.Open();
using (var cmd = new NpgsqlCommand("Update test set nomecampo2=@paramCampo2, nomecampo=@paramnomecampo, where id=@paramId ", conn))
{
cmd.Parameters.AddWithValue("@paramCampo2", "valore2");
cmd.Parameters.AddWithValue("@paramnomecampo", "Emanuele2");
cmd.Parameters.AddWithValue("@paramId", 2);
int inserimenti = cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
Ora non ci resta che scrivere il codice per la cancellazione dei record, anch’esso è simile alla modifica ed inserimento dei dati, solo che a differenza di questi due metodi, non avrà parametro, anche se possiamo scriverlo, ma è una riga di codice in più.
VB.Net
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
Dim connString As String = System.Configuration.ConfigurationManager.ConnectionStrings("PGConn").ConnectionString
Using conn As New NpgsqlConnection(connString)
Try
conn.Open()
Using cmd As New NpgsqlCommand("delete from test where id=5", conn)
Dim inserimenti As Integer = cmd.ExecuteNonQuery()
End Using
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Using
End Sub
C#
private void btnDelete_Click(object sender, EventArgs e)
{
string connString = System.Configuration.ConfigurationManager.ConnectionStrings["PGConn"].ConnectionString;
using (var conn = new NpgsqlConnection(connString))
{
try
{
conn.Open();
using (var cmd = new NpgsqlCommand("delete from test where id=1", conn))
{
int inserimenti = cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
Conclusioni
L’articolo ha voluto fornire al lettore le basi fondamentale per la programmazione di un gestionale, basato sul database gratuito PostgreSQL. I vari esempi di codice, permettono al lettore di acquisire quelle conoscenze basilari che gli permetteranno di utilizzare in maniera agevolata e rapida la gestione di tale database. Per chi ha già utilizzato la tecnologia ADO.Net troverà famigliare tale utilizzo.