domenica 31 maggio 2020

.Net la gestione del database Microsoft Access tramite VB.Net e C# seconda parte

Si riporta la seconda parte dell'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_1678.aspx
Continua la serie di articoli riguardante la gestione di un database Microsoft Access 2016 utilizzando la tecnologia .Net tramite i linguaggi di programmazione VB.Net e C#.
Dopo aver visto nella prima parte qui https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_net-la-gestione-del-database-microsoft-access-2016-tramite-vbnet-c_1677.aspx la realizzazione di un database, che come indicato è la parte più importante nel realizzare applicativi, in questa penultima parte capire il codice .Net che andremo ad utilizzare nei vari linguaggi di programmazione. Il tutto come sempre in un ambiente di tipo “Windows Application” ma il codice si può utilizzare anche in ambiente web come Asp.Net e Asp.Net MVC.
Creazione del progetto
Ora non ci resta che creare il nostro primo programma, aprite l’ambiente di sviluppo che può essere Visual Studio 2019 community o altre versione.
Si crea un nuovo progetto di tipo “Desktop” selezionando il modello “App Windows Forms” il tutto come mostrato in figura 1.


Figura 1 – La scelta del modello.

Dopo aver selezionato il modello, facciamo click sul pulsante “Avanti” nella finestra successiva, figura 2, dobbiamo impostare il nome del progetto e dove poterlo salvare.
Nella casella Nome progetto impostiamo il nome del progetto, che poi sarà quello della soluzione, la soluzione è una raccolta di progetti.
Il campo “Percorso” indica dove salvare i file che verranno generati.
Come versione Framework, usiamo l’ultima, in questo caso la versione Framework 4.8.



Figura 2 – La finestra con le impostazioni del progetto.

A questo punto, in basso a destra facciamo click sul pulsante “Crea”.

Verrà visualizzata una form al quale andremo ad inserire i vari controlli.
A questo punto apriamo la tabella “Clienti” del database che abbiamo creato e lo valorizziamo con dei nostri valori a nostro piacimento.
Terminata questa operazione torniamo nel progetto Visual studio e inseriamo i controlli.
Le operazioni che andremo a vedere sono inserimento, modifica, caricamento dei dati e cancellazione, naturalmente in maniera molto semplice perché altrimenti avremmo dovuto estendere la guida.
Le operazioni verranno effettuate in una sola form, ma per buona prassi andavano fatti in form diversi e quindi altre due finestre.
Potremmo gestire la base dati anche con le relazioni, ma per non allungare troppo il tutorial l’argomento non viene trattato, anche se le tabella vanno messe in relazioni in qualunque database relazionare che si sta utilizzando.
Nella form dobbiamo inserire una serie di controlli che ci permetteranno di gestire i dati, in particolare dobbiamo aggiungere un controllo di tipo griglia per la presentazione dei dati, è questo è un Datagridview, con la proprietà “Name” impostato con il valore “DtgDati” nel quale ci saranno i dati delle tre tabelle recuperate tramite l’istruzione Select.
Due controlli cornice che rappresentano i campi relativi alle fatture e ordine.
Avremo due controlli caselle combinate, ossia combobox, con il quale rappresentano una clienti ed avrà la proprietà Name impostato su “CmbClienti” ed una relative alle fatture denominata “CmbFatture”.
Una serie di controlli label che rappresentano i titoli per le varie caselle di testo ed altri controlli, un controllo datapicket, 9 controlli di tipo caselle di testo, e 7 pulsanti.
I controlli di tipo caselle di testo, avranno l’iniziale di tipo txt, quindi la descrizione sarà txtdescrizione e così via.
Mentre per i controlli di tipo pulsante, avranno l’iniziale di tipo btn, quindi per il pulsante inserisci sarà denominato “btnInserisci”.
L’interfaccia sarà come quella mostrata in figura 3



Figura 3 – L’interfaccia grafica

Stesura del codice

Siamo arrivati alla parte che più interessa e piace ogni sviluppatore quella della stesura del codice.
La gestione dei dati avviene tramite la tecnologia Ado.Net, questo perché Entity Framework che spesso si usa per gestire le varie fonti dati, non è possibile utilizzarlo con Microsoft Access.
In particolare utilizzeremo lo spazio dei nomi oledb.
Facciamo doppio click sulla form, e passiamo in visualizzazione codice.
In alto sopra ad ogni dichiarazione, scriviamo il riferimento a tale spazio dei nomi.
Qui di seguito la dichiarazione per entrambi i linguaggi di programmazione.


VB.Net

Imports System.Data.OleDb

 

C#

using System.Data.OleDb;



Sempre rimanendo in visualizzazione codice, dopo l’evento load della form che è stato generato nel momento in cui abbiamo fatto doppio click, dobbiamo creare una funzione che richiama una funzione per il caricamento dei dati.
Qui di seguito la funzione dei caricamento dati, per entrambi i linguaggi.



VB.Net

Private Sub CaricaDati()

        Try

 

 

            'carico le combobox

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

                sqlConnessione.Open()

 

 

                Using CommandSql As New OleDbCommand("Select ID, Denominazione FROM Clienti", sqlConnessione)

                    Using dtaAdapter As New OleDbDataAdapter(CommandSql)

                        Using dttDati As New DataTable()

                            dtaAdapter.Fill(dttDati)

                            cmbClienti.ValueMember = "ID"

                            cmbClienti.DisplayMember = "Denominazione"

                            cmbClienti.DataSource = dttDati.DefaultView

 

                        End Using

                        Using dttDati As New DataTable

                            dtaAdapter.SelectCommand = New OleDbCommand("Select ID, NumeroFattura FROM Fatture", sqlConnessione)

                            dtaAdapter.Fill(dttDati)

                            cmbFattura.ValueMember = "ID"

                            cmbFattura.DisplayMember = "NumeroFattura"

                            cmbFattura.DataSource = dttDati.DefaultView

                        End Using

                        Using dttDati As New DataTable

 

                            dtaAdapter.SelectCommand = New OleDbCommand("SELECT fat.*, cli.*, ord.*  FROM ((Fatture fat left join Clienti cli on fat.idclienti = cli.id) left join ordini ord on fat.id = ord.idfattura)", sqlConnessione)

                            dtaAdapter.Fill(dttDati)

                            DtgDati.DataSource = dttDati

                        End Using

 

                    End Using

 

 

                End Using

            End Using

 

        Catch ex As Exception

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

        End Try

 

    End Sub

 

C#

 

  private void CaricaDati()

        {

            try

            {

 

 

                // carico le combobox

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

                {

                    sqlConnessione.Open();

 

 

                    using (OleDbCommand CommandSql = new OleDbCommand("Select ID, Denominazione FROM Clienti", sqlConnessione))

                    {

                        using (OleDbDataAdapter dtaAdapter = new OleDbDataAdapter(CommandSql))

                        {

                            using (DataTable dttDati = new DataTable())

                            {

                                dtaAdapter.Fill(dttDati);

                                cmbClienti.ValueMember = "ID";

                                cmbClienti.DisplayMember = "Denominazione";

                                cmbClienti.DataSource = dttDati.DefaultView;

                            }

                            using (DataTable dttDati = new DataTable())

                            {

                                dtaAdapter.SelectCommand = new OleDbCommand("Select ID, NumeroFattura FROM Fatture", sqlConnessione);

                                dtaAdapter.Fill(dttDati);

                                cmbFattura.ValueMember = "ID";

                                cmbFattura.DisplayMember = "NumeroFattura";

                                cmbFattura.DataSource = dttDati.DefaultView;

                            }

                            using (DataTable dttDati = new DataTable())

                            {

 

                                dtaAdapter.SelectCommand = new OleDbCommand("SELECT fat.*, cli.*, ord.*  FROM ((Fatture fat left join Clienti cli on fat.idclienti = cli.id) left join ordini ord on fat.id = ord.idfattura)", sqlConnessione);

                                dtaAdapter.Fill(dttDati);

                                DtgDati.DataSource = dttDati;

                            }

                        }

                    }

                }

            }

            catch (Exception ex)

            {

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

            }

        }




Sempre rimanendo in modalità codice, nell’evento load della form dobbiamo richiamare la funzione appena creata.




VB.Net

 

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

 

 

        Try

            CaricaDati()

 

 

 

        Catch ex As Exception

 

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

 

        End Try

 

 

 

    End Sub

 

C#

private void Form1_Load(object sender, EventArgs e)

        {

            CaricaDati();

        }






Ora non ci resta che testare il nostro programma eseguendo il progetto e se noteremo che all’apertura della form non sono presenti i dati.
Naturalmente dobbiamo impostare il percorso del database Microsoft Access nella connectionstring.
Come si è visto dai frammenti di codice precedenti, si creano diversi oggetti per la gestione dei dati, in particolare un oggetto di tipo oledbconnection con il quale andremo ad effettuare la connessione alla base dati, un oggetto di tipo oledbcommand con il quale faremo le query di select, ossia di lettura delle tabelle per il caricamento dei dati nella griglia, e delle relative combobox, un oggetto di tipo oledAdpater che esegue la query e valorizza un oggetto di tipo DataTable per la valorizzazione della griglia e delle caselle combinate.
Le query di relazione ossia quelle con il quale si prendono i dati da più tabelle in Microsoft Access, si devono utilizzare le parentesi tonde, in questo caso sono tre tabelle.

Conclusioni

In questo articolo abbiamo impostato  l’applicazione di tipo Windows Application, anche se andava affrontata in maniera diversa, con l’aggiunta di più finestre, ma questo comportava la descrizione tecnica e soprattutto lunga al quale lettore poteva essere dispersiva, invece si è cercato di rendere la guida più sintetica possibile permettendo di evidenziare i concetti base al quale sono utilizzati in ogni realizzazione di programma gestionale.
La tecnica del caricamento dei dati con le classi che sono state utilizzate è lo stesso che si utilizza anche per applicazioni web, con la tecnologia Asp.Net.
Nel prossimo ed ultimo articolo affronteremo l’inserimento, cancellazione e modifica dei dati.

sabato 30 maggio 2020

Download gratuito gioco BORDERLANDS: THE HANDSOME COLLECTION



C'è tempo fino al 4 giugno 2020 per scaricare gratuitamente il gioco per adulti Borderlands the handsome collection, per piattaforma Windows ed in lingua italiana.
Il gioco è per maggiorenni.
Per maggiori informazioni e download visitate il seguente sito https://www.epicgames.com/store/it/bundles/borderlands-the-handsome-collection

venerdì 29 maggio 2020

,Net Eseguire windows application come amministratore

Nel caso che abbiamo realizzato un programma eseguibile e vogliamo che venga eseguito in modalità "Amministratore" dobbiamo aggiungere al progetto un file di tipo "app.manifest" al quale va impostato il parametro level del tag requestExecutionLevel a "requireAdministrator" come mostrato qui di seguito.


   <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />


Per aggiungere il file manifest, fare click sul pulsante destro sul nome del progetto nella finestra "Esplora soluzione" dal menu selezionare la voce "Aggiungi" e poi "Nuovo Elemento" nella finestra che viene aperta, selezionare nel menu di sinistra la voce "Generale" ed il modello "File di manifesto " come riportato nella figura qui di seguito.







giovedì 28 maggio 2020

ClickOnce non supporta il livello di esecuzione richieste 'requireAdministrator'



Quando si sta rilasciando un programma eseguibile realizzato in .Net ed è stato impostato con privilegi di amministratore, tramite il file "app.manifest", durante la compilazione può generare un errore di tipo "ClickOnce non supporta il livello di esecuzione richieste 'requireAdministrator'".

Per evitare questo errore e fare in modo che il progetto di setup venga compilato, nella proprietà del progetto di tipo "Windows Application", togliere la spunta alla voce "Abilitazione impostazioni di sicurezza Clickonce" situato nella voce "Sicurezza", il tutto come riportato qui di seguito.




mercoledì 27 maggio 2020

C# How to add an hour to a timespan

Il frammento di codice C# qui di seguito illustra una tecnica di come aggiungere due ore ad un oggetto di TimeSpan.


DateTime.Now.TimeOfDay.Add(TimeSpan.FromHours(2))

martedì 26 maggio 2020

Ado.Net Procedure or function 'Nomeprocedure' expects parameter '@Parametro', which was not supplied.

Quando si sta effettuando in Ado.Net una chiamata ad una stored procedure passando un valore null, si può verificare il messaggio di errore:

Procedure or function 'NomeStoredProcedure' expects parameter '@NomeParametro', which was not supplied.

Qui di seguito il codice C# per scatenare tale errore.

 command.Parameters.Add(new SqlParameter("@Parametro", VariabileConValoreNull));

L'oggetto Command è di tipo SqlCommand, al quale si passa un valore di tipo null.
Se invece si passa il valore dbnull la stored procedure viene eseguita correttamente, qui il frammento di codice.

 command.Parameters.Add(new SqlParameter("@Parametro", DBNull.Value));


lunedì 25 maggio 2020

Download ebook gratuito Azure Cognitive Services

Azure Cognitive Service Succinctly


Dal seguente sito https://www.syncfusion.com/ebooks/azure-cognitive-service-succinctly è possibile scaricare un ebook gratuito in lingua inglese e formato pdf, riguardante Azure.
Per il download è necessario avere un account gratuito al sito. Per maggiori informazioni e download visitate il sito indicato.

domenica 24 maggio 2020

Download ebook gratuiti di Mondadori

Da qualche mese la Mondadori ha messo on line la possibilità di scaricare gratuitamente alcuni libri.
Per scaricare o valutare i vari libri messi a disposizione vistate il seguente sito https://www.mondadoristore.it/eBook-italiani-gratis/gr-3046/

sabato 23 maggio 2020

Download gratuito Civilization VI




Un gioco molto bello e di strategia giunto ad una nuova versione quello proposto questa settimana da Epicgames.
Il gioco Civilization VI scaricabile gratuitamente  fino al 28 maggio 2020 senza limitazioni, è in lingua italiana per sistemi operativi Windows.
Per il download e maggiori informazioni visitate il seguente sito https://www.epicgames.com/store/it/product/sid-meiers-civilization-vi/home

venerdì 22 maggio 2020

Creazione di video giochi online GameFroot




GameFroot è una piattaforma online per la creazione di video giochi.
Il gioco è in lingua inglese ma che comprende una creazione guidata. Per maggiori informazioni visitate il seguente sito https://make.gamefroot.com/