lunedì 29 giugno 2020

Net la gestione del database Microsoft Access tramite VB.Net e C# terza ed ultima parte

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_net-la-gestione-del-database-microsoft-access-tramite-vbnet-e-c_1679.aspx

In questa terza ed ultima parte del tutorial per la gestione dei database di Microsoft Access, vedremo come effettuare l’inserimento dei dati, la cancellazione dei record e la modifica.
Riprendendo l’articolo precedente qui https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_net-la-gestione-del-database-microsoft-access-tramite-vbnet-e-c_1678.aspx il secondo, , vedremo come tramite Ado.Net ed istruzione SQL possiamo gestire i dati.
Si riprende il progetto precedente con il quale abbiamo già impostato la nostra form, con il quale verrà effettuate tutte le operazioni CRUD.

Stesura del codice

Facciamo doppio click sul pulsante “Inserisci” posto nella cornice relative alla fattura ed in modalità codice scriveremo il codice per inserire i dati nella tabella fatture.
Qui di seguito si riporta il frammento di codice per l’evento click del pulsante inserimento.



VB.Net

Private Sub BtnInserisciFattura_Click(sender As Object, e As EventArgs) Handles BtnInserisciFattura.Click

        Try

 

            If TxtNumerofattura.Text.Trim() = "" Then

                MessageBox.Show("Campo Numero fattura obbligatorio.", "Informazione", MessageBoxButtons.OK, MessageBoxIcon.Information)

                Return

            ElseIf IsNumeric(TxtNumerofattura.Text.Trim()) = False Then

                MessageBox.Show("Campo Numero fattura dev'essere numerico.", "Informazione", MessageBoxButtons.OK, MessageBoxIcon.Information)

                Return

            End If

            Dim Sql = "INSERT INTO fatture (NumeroFattura, idclienti, DataFattura, Consegna, [Note]) VALUES  (" & TxtNumerofattura.Text & "," & cmbClienti.SelectedValue.ToString() & ",#" & DateTimePicker1.Value & "#" & ",'" & txtConsegna.Text & "','" & txtNote.Text & "')"

 

            Using sqlConnessione As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Dati\Dati.accdb")

                sqlConnessione.Open()

 

 

                Using CommandSql As New OleDbCommand(Sql, sqlConnessione)

 

                    Dim inserimento As Integer = CommandSql.ExecuteNonQuery()

                End Using

            End Using

            CaricaDati()

 

        Catch ex As Exception

            MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

 

 

C#

 

   private void BtnInserisciFattura_Click(object sender, EventArgs e)

        {

            try

            {

                if (TxtNumerofattura.Text.Trim() == "")

                {

                    MessageBox.Show("Campo Numero fattura obbligatorio.", "Informazione", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    return;

                }

                else

                {

                    var isNumeric = int.TryParse(TxtNumerofattura.Text.Trim(), out int n);

                    if (isNumeric == false)

                    {

                        MessageBox.Show("Campo Numero fattura dev'essere numerico.", "Informazione", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    return;

                    }

 

                }

                var Sql = @"INSERT INTO fatture (NumeroFattura, idclienti, DataFattura, Consegna, [Note]) VALUES  (" + TxtNumerofattura.Text + "," + cmbClienti.SelectedValue.ToString() + ",#" + DateTimePicker1.Value + "#" + ",'" + txtConsegna.Text + "','" + txtNote.Text + "')";

 

 

                using (OleDbConnection sqlConnessione = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Dati\Dati.accdb"))

                {

                    sqlConnessione.Open();

 

 

                    using (OleDbCommand CommandSql = new OleDbCommand(Sql, sqlConnessione))

                    {

                        int inserimento = CommandSql.ExecuteNonQuery();

                    }

                }

                CaricaDati();

            }

            catch (Exception ex)

            {

                MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

        }


Nell’esempio precedente vengono utilizzare le classi  Oledbconnection e oledbcommand con il quale facciamo l’inserimento dei dati. Il campo Note essendo una parola chiave di Microsoft Access va inserita tra parentesi quadrate.
Inoltre vengono svolti dei controlli sui dati, come se è valorizzato il campo numero fattura e se è di tipo numerico.
Ora non ci resta che eseguire il nostro programma e fare le prove di inserimento.
Appurato il funzionamento dell’inserimento per il pulsante delle fatture dobbiamo scrivere il codice per l’inserimento dei dati relativo alla fatture, che tramite id fattura metterà in relazione le fatture.
Qui di seguito il codice per entrambi i linguaggi per l’evento click del pulsante inserimento della sezione ordini.





VB.Net

Private Sub BtnInserisciOrdini_Click(sender As Object, e As EventArgs) Handles BtnInserisciOrdini.Click

        Try

 

 

            Dim Sql = "INSERT INTO Ordini (idfattura, Descrizione, Quantita, prezzo, Imponibile, IVA, TotaleFattura) VALUES  (" & cmbFattura.SelectedValue & ",'" & TxtDescrizione.Text & "'," & txtQuantita.Text & "," & txtPrezzo.Text & "," & txtImponibile.Text & "," & txtIva.Text & "," & txtTotale.Text & ")"

 

            Using sqlConnessione As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Dati\Dati.accdb")

                sqlConnessione.Open()

 

 

                Using CommandSql As New OleDbCommand(Sql, sqlConnessione)

 

                    Dim inserimento As Integer = CommandSql.ExecuteNonQuery()

                End Using

            End Using

            CaricaDati()

 

        Catch ex As Exception

            MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

 

 

C#

 

private void BtnInserisciOrdini_Click(object sender, EventArgs e)

        {

            try

            {

                var Sql = "INSERT INTO Ordini (idfattura, Descrizione, Quantita, prezzo, Imponibile, IVA, TotaleFattura) VALUES  (" + cmbFattura.SelectedValue + ",'" + TxtDescrizione.Text + "'," + txtQuantita.Text + "," + txtPrezzo.Text + "," + txtImponibile.Text + "," + txtIva.Text + "," + txtTotale.Text + ")";

               

                using (OleDbConnection sqlConnessione = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Dati\Dati.accdb"))

                {

                    sqlConnessione.Open();

 

 

                    using (OleDbCommand CommandSql = new OleDbCommand(Sql, sqlConnessione))

                    {

                        int inserimento = CommandSql.ExecuteNonQuery();

                    }

                }

                CaricaDati();

            }

            catch (Exception ex)

            {

                MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

        }


Effettuiamo anche in questo caso l’esecuzione del programma e facciamo delle prove per verificare il corretto funzionamento.
Come si è visto dai due esempi di codice precedenti, il codice è uguale per le fasi di inserimento utilizzando le classi oledbconnection per collegarsi al database, ed un oggetto di tipo oledbcommand per eseguire le query.
Il pulsante annulla dovrà nascondere e visualizzare alcuni pulsanti. Qui di seguito il frammento di codice che il lettore troverà famigliare.



VB.Net

Private Sub BtnAnnulla_Click(sender As Object, e As EventArgs) Handles BtnAnnulla.Click

        btnSalva.Visible = False

        BtnAnnulla.Visible = False

        BtnModifica.Visible = True

    End Sub

 

C#

private void BtnAnnulla_Click(object sender, EventArgs e)

        {

            btnSalva.Visible = false;

            BtnAnnulla.Visible = false;

            BtnModifica.Visible = true;

        }


Ora dobbiamo scrivere il codice per il pulsante “Modifica” con il quale andiamo a caricare i valori nella casella di testo del box riguardante le fatture, in questo caso i dati che verranno modificati sono solamente per il campo “Consegna” e per il campo “Note”.


VB.Net

Private Sub BtnModifica_Click(sender As Object, e As EventArgs) Handles BtnModifica.Click

 

        If DtgDati.Rows.GetRowCount(DataGridViewElementStates.Selected) > 0 Then

            'prendo id della fattura e carico i dati nella casella di testo

            Dim idFattura As Integer = DtgDati.SelectedCells().Item(0).Value

            TxtNumerofattura.Text = DtgDati.SelectedCells().Item(3).Value

 

 

 

            If DtgDati.SelectedCells().Item(4).Value.ToString() <> "" Then

                DateTimePicker1.Value = DtgDati.SelectedCells().Item(4).Value

            End If

 

 

            txtConsegna.Text = DtgDati.SelectedCells().Item(5).Value.ToString()

            txtNote.Text = DtgDati.SelectedCells().Item(6).Value.ToString()

 

 

 

 

        Else

            MessageBox.Show("Selezionare un record.", "Informazione", MessageBoxButtons.OK, MessageBoxIcon.Information)

            Return

        End If

 

 

        btnSalva.Visible = True

        BtnAnnulla.Visible = True

        BtnModifica.Visible = False

    End Sub

 

C#

private void BtnModifica_Click(object sender, EventArgs e)

        {

            if (DtgDati.Rows.GetRowCount(DataGridViewElementStates.Selected) > 0)

            {

                // prendo id della fattura e carico i dati nella casella di testo

                int idFattura = (int)DtgDati.SelectedCells[0].Value;

                TxtNumerofattura.Text = DtgDati.SelectedCells[3].Value.ToString();

 

 

 

                if (DtgDati.SelectedCells[4].Value.ToString() != "")

                    DateTimePicker1.Value = (DateTime)DtgDati.SelectedCells[4].Value;

 

 

                txtConsegna.Text = DtgDati.SelectedCells[5].Value.ToString();

                txtNote.Text = DtgDati.SelectedCells[6].Value.ToString();

            }

            else

            {

                MessageBox.Show("Selezionare un record.", "Informazione", MessageBoxButtons.OK, MessageBoxIcon.Information);

                return;

            }

 

 

            btnSalva.Visible = true;

            BtnAnnulla.Visible = true;

            BtnModifica.Visible = false;

        }


Il codice del pulsante salva, che sarà visibile solo nel momento in cui si andranno ad applicare alle casella di testo i valori selezionati nella griglia che avviene tramite il pulsante “modifica” permetterà di effettuare una modifica dei dati delle colonne “Consegna” e “Note” della tabella fattura, tramite istruzione “Update”.
Qui di seguito il frammento di codice delle suddette operazioni.


VB.Net

Private Sub btnSalva_Click(sender As Object, e As EventArgs) Handles btnSalva.Click

        Try

            Dim idFattura As Integer = DtgDati.SelectedCells().Item(0).Value

            Dim Sql As String = "update fatture set Consegna='" & txtConsegna.Text & "', [Note]='" & txtNote.Text & "'     where id=" & idFattura

            Using sqlConnessione As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Dati\Dati.accdb")

                sqlConnessione.Open()

 

 

                Using CommandSql As New OleDbCommand(Sql, sqlConnessione)

 

                    Dim Cancellazione As Integer = CommandSql.ExecuteNonQuery()

                End Using

 

 

            End Using

            CaricaDati()

 

 

 

            btnSalva.Visible = False

            BtnAnnulla.Visible = False

            BtnModifica.Visible = True

        Catch ex As Exception

            MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

 

 

C#

  private void btnSalva_Click(object sender, EventArgs e)

        {

            try

            {

                int idFattura = (int)DtgDati.SelectedCells[0].Value;

                string Sql = "update fatture set Consegna='" + txtConsegna.Text + "', [Note]='" + txtNote.Text + "'     where id=" + idFattura;

                using (OleDbConnection sqlConnessione = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Dati\Dati.accdb"))

                {

                    sqlConnessione.Open();

 

 

                    using (OleDbCommand CommandSql = new OleDbCommand(Sql, sqlConnessione))

                    {

                        int Cancellazione = CommandSql.ExecuteNonQuery();

                    }

                }

                CaricaDati();

 

 

 

                btnSalva.Visible = false;

                BtnAnnulla.Visible = false;

                BtnModifica.Visible = true;

            }

            catch (Exception ex)

            {

                MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

        }


Dopo tutte queste operazioni andiamo ad eseguire il nostro programma ed effettuiamo le prove di modifica, annullamento e salvataggio dei dati, in modo di verificare se  il codice scritto è corretto.
Come si è visto dal codice precedente, si fa uso dell’istruzione update per aggiornare i dati prendendo ID della fattura.
Essendo questo un articolo per fornire delucidazioni all’autore sulle operazioni CRUD, il codice Idfattura sarebbe buona norma che viene messo in memoria in una classe creata appositamente oppure in un controllo label in modo che l’utente durante la modifica non cambia id.
Anche in questo caso, le classi utilizzate sono le stesse di quelle utilizzate per l’inserimento, un oggetto di tipo “OledbConnection” un oggetto di tipo “OledbAdapter”.

Siamo giunti all’ultima fase della stesura del codice, quella della cancellazione dei record, questo avviene tramite l’istruzione “SQL” di tipo “Delete” con il quale andiamo ad eliminare il record selezionato prendendo come riferimento il campo chiave della fattura ed eliminando a sua volta tutte gli ordini che fanno parte della colonna chiave di tale tabella.
Qui di seguito si riporta il frammento di codice per entrambi i linguaggi delle suddette operazioni.



VB.Net

Private Sub BtnElimina_Click(sender As Object, e As EventArgs) Handles BtnElimina.Click

        Try

            If DtgDati.Rows.GetRowCount(DataGridViewElementStates.Selected) > 0 Then

                'prendo id della fattura e carico i dati nella casella di testo

                Dim idFattura As Integer = DtgDati.SelectedCells().Item(0).Value

                If MessageBox.Show("Sei sicuro di voler eliminare la fattura selezionata numero: " & idFattura & "?", "Informazioni", MessageBoxButtons.YesNo, MessageBoxIcon.Information) = DialogResult.Yes Then

 

                    Dim Sql As String = "Delete from fatture where id=" & idFattura

                    Using sqlConnessione As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Dati\Dati.accdb")

                        sqlConnessione.Open()

 

 

                        Using CommandSql As New OleDbCommand(Sql, sqlConnessione)

 

                            Dim Cancellazione As Integer = CommandSql.ExecuteNonQuery()

                        End Using

                        Sql = "Delete from Ordini where idfattura = " & idFattura

                        Using CommandSql As New OleDbCommand(Sql, sqlConnessione)

 

                            Dim Cancellazione As Integer = CommandSql.ExecuteNonQuery()

                        End Using

                    End Using

                    CaricaDati()

 

 

 

 

                End If

            Else

                MessageBox.Show("Selezionare un record.", "Informazione", MessageBoxButtons.OK, MessageBoxIcon.Information)

                Return

            End If

 

 

        Catch ex As Exception

            MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

 

 

    End Sub

 

C#

 

private void BtnElimina_Click(object sender, EventArgs e)

        {

            try

            {

                if (DtgDati.Rows.GetRowCount(DataGridViewElementStates.Selected) > 0)

                {

                    // prendo id della fattura e carico i dati nella casella di testo

                    int idFattura = (int) DtgDati.SelectedCells[0].Value;

                    if (MessageBox.Show("Sei sicuro di voler eliminare la fattura selezionata numero: " + idFattura + "?", "Informazioni", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)

                    {

                        string Sql = "Delete from fatture where id=" + idFattura;

                        using (OleDbConnection sqlConnessione = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Dati\Dati.accdb"))

                        {

                            sqlConnessione.Open();

 

 

                            using (OleDbCommand CommandSql = new OleDbCommand(Sql, sqlConnessione))

                            {

                                int Cancellazione = CommandSql.ExecuteNonQuery();

                            }

                            Sql = "Delete from Ordini where idfattura = " + idFattura;

                            using (OleDbCommand CommandSql = new OleDbCommand(Sql, sqlConnessione))

                            {

                                int Cancellazione = CommandSql.ExecuteNonQuery();

                            }

                        }

                        CaricaDati();

                    }

                }

                else

                {

                    MessageBox.Show("Selezionare un record.", "Informazione", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    return;

                }

            }

 

            catch (Exception ex)

            {

                MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

        }



Ora non ci resta che testare il codice appena scritto per verificare il corretto funzionamento.
Naturalmente è buona prassi prima di cancellare un record quello di visualizzare l’utente che si sta cancellando un dato e quindi se è sicuro di tale operazioni.

Conclusioni

Si conclude con questo articolo il mini tutorial riguardante l’utilizzo della base dati creata in Microsoft Access per le operazioni di CRUD ossia lettura, inserimento, modifica e cancellazione dei dati, su un progetto di tipo Windows Application. L’utilizzo del database Microsoft Access può tornare utile per programmi di poche righe di codice e con una bassa utenza, ma è consigliabile affidarsi ad un database più professionale e gratuito come Microsoft Sql Server express, una versione gratuita e ridotta del famoso server Microsoft.
Naturalmente alcuni aspetti del programma andavano affrontati in maniera diversa per via di un codice più professionale e soprattutto per una corretta gestione interfaccia utente, ma per evitare di essere dispersivo e soprattutto fornire al lettore in pochi articoli una delucidazione completa e chiara sulla semplice gestione del database si è cercato di evitare alcuni passaggi per affrontare i temi principali.

Nessun commento: