lunedì 8 ottobre 2018

Introduzione alla programmazione del database Postgresql con .Net C# e VB.Net

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_introduzione-alla-programmazione-del-dat_1601.aspx


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, id=@paramId where  id=1", 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.

Nessun commento: