Creare un gestionale per strutture ricettive in C# – #8 – Rimuovi Camera

Creare un gestionale per strutture ricettive in C# – #8 – Rimuovi Camera

Creare un gestionale per strutture ricettive in C# – #8 – Rimuovi Camera: Lezione numero 8 del corso, nella quale vedremo come rimuovere un record dal database.

Questa è la penultima lezione relativa alle camere del database, nella prossima lezione, correggeremo i vari difetti della schermata, per poi passare agli elementi successivi del programma.

In questa lezione correggeremo 2 problemi del programma:

  • Il database che viene sovrascritto ogni volta
  • Il crash che si verifica quando un utente cerca di inserire una nuova camera con un Id già esistente

Dopo aver corretto questi 2 problemi andremo a scrivere il codice per rimuovere i record relativi alle camere dal database.

Creare un gestionale per strutture ricettive in C# – #8 – Rimuovi Camera

Iniziamo subito con il motivo per cui il database viene sovrascritto quando lo apriamo da Visual Studio.

Semplice, da Visual Studio apriamo un database diverso da quello che usiamo quando eseguiamo il programma.

Infatti il database è esterno alla cartella Debug o Release, per questo motivo quando andiamo ad aprire il database lo aggiorniamo e va a sovrascrivere il database precedente.

Per poter risolvere il problema basta collegare il database presente nella cartella Debug (o Release) in visual studio e lavorare su quello.

Come evitare di far crashare il programma quando si inserisce un ID già esistente

Nella lezione precedente abbiamo aggiunto la possibilità di modificare le camere presenti nel database.

Quando modifichiamo le camere per evitare che l’ID possa essere modificato lo abbiamo bloccato.

Ma questo non ci assicura che quando un utente inserisce una nuova camera, per errore non inserisca un ID già esistente.

Così facendo il programma andrebbe in crash perchè non riuscirebbe a gestire l’eccezione.

La soluzione è molto semplice e si chiama try…catch.

Infatti andremo ad inserire la query all’interno del try per poter intercettare eventuali eccezioni e poterle quindi gestire correttamente.

try
            {
                QueryInserimentoCamera.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                if (ex.Number.ToString() == "2627")
                {
                    MessageBox.Show("L'ID inserito è già presente.");
                }
                else {
                    MessageBox.Show(ex.Message);
                }
                return;
            }

In questa porzione di codice andiamo ad eseguire la query e nel caso si verifichi un’eccezione controlliamo prima il codice, se dovesse essere 2627 (il codice relativo alla chiave primaria già esistente), visualizzeremo il messaggio personalizzato che avvisa l’utente che l’id è già presente.

Altrimenti mostreremo il messaggio di errore creato direttamente dal programma.

Come rimuovere un record dal database

Dopo aver risolto due dei principali problemi del nostro software possiamo proseguire e aggiungere il codice che ci permetterà di rimuovere un record dal database.

Il codice completo da inserire per rimuovere un record è:

//CONNESSIONE DATABASE
            string stringa_connessione = Properties.Settings.Default.CamereConnectionString;
            SqlConnection connessioneDB = new SqlConnection(stringa_connessione);
            if (connessioneDB.State != ConnectionState.Open)
            {
                connessioneDB.Open();
            }
            //QUERY DATABASE
            // DELETE FROM [tblCamere] WHERE ID = 'valore';
            string IdRimozione = dataElencoCamere.Rows[dataElencoCamere.SelectedRows[0].Index].Cells[0].Value.ToString();
            string sqlQuery = "DELETE FROM [tblCamere] WHERE [Id] = '" + IdRimozione + "';";
            SqlCommand QueryInserimentoCamera = new SqlCommand(sqlQuery, connessioneDB);
            try
            {
                if (MessageBox.Show("Sei sicuro di voler rimuovere la camera con ID " + IdRimozione, "Rimuovere la camera?", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    QueryInserimentoCamera.ExecuteNonQuery();
                }
            }
            catch (SqlException ex)
            {
                    MessageBox.Show(ex.Message);
            }
            connessioneDB.Close();
            // RICARICA DATABASE
            CaricaDatabaseCamere();

In questo modo prenderemo l’id della riga selezionata nella DataGridView e lo useremo per cercare il record nel database e per rimuoverlo.

Download del progetto aggiornato alla lezione 8

E’ possibile scaricare il progetto aggiornato a questa lezione dal seguente link:

Software per vedere il contenuto dei database MDF

Nel video, mostro un software che è possibile utilizzare per aprire i database MDF e vedere il loro contenuto.

Questo software è particolarmente utile quando si vuole aprire un database e non si ha Visual Studio sul PC, oppure per guardare rapidamente i record senza dover avviare Visual Studio.

Inoltre permette di aprire anche database corrotti, quindi molto utile per leggere i dati dai database che per qualsiasi motivo non dovessero essere più funzionanti.

Sito web di SQL Viewer