C# WPF lettura da MariaDB

di il
1 risposte

C# WPF lettura da MariaDB

Ciao ,

Mi sono avvicinato a C# da qualche giorno ed ho installato anche MariaDB.
Questo codice funzionante estrae una colonna dalla tabella e la visualizza tramite datagrid.
Mi sono aiutato con una guida iniziando allo stesso tempo ad approfondire l'argomento che riporto qui sotto
Dopo vari studi di XAML e MySQL non mi è chiaro un punto mentre spero che il resto sia giusto.

Il codice di sotto esegue secondo me questi passi:

- APERTURA: Impostiamo la string di connessione leggendola da ConnecionStrings.Tenta di aprire la connessione.
- COMANDO: Definiamo una query per estrarre la colonna Codifica dalla tabella tb1
- INTERFACCIA: Il DataAdapter che interfaccia il db mysql con il dataset eseguendo comandi. Fa da ponte (Bridge)
- MEMORIA: Il dataset un'area di memoria dove sono memorizzati i dati di uno o piu tabelle pronta per essere letta o scritta.

 public partial class MainWindow : Window
    {
        #region MySqlConnection Connection
        MySqlConnection connection = new MySqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        public MainWindow()
        {
            InitializeComponent();
            testDB();
        }
        #endregion
        private void testDB()
        {
            try
            {
                connection.Open();
                MySqlCommand cmd = new MySqlCommand("SELECT Codifica FROM tb1;", connection);
                MySqlDataAdapter adp = new MySqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                adp.Fill(ds, "LoadDataBinding");  
                dataGridCustomers.DataContext = ds;
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                connection.Close();
            }
        }
    }
Nel codice XAML

       <Grid HorizontalAlignment="Left" Height="310" VerticalAlignment="Top" Width="625">
            <DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="14,55,0,46" Name="dataGridCustomers" Width="575" itemsSource="{Binding Path=LoadDataBinding}" CanUserResizeRows="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Path=Codifica}" Header="Codifica" Width="100" IsReadOnly="True" />
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
Il dataGrid assume come nome DataGridCustomers e viene popolato con i dati del DataSet ds.
Il loadDataBinding immagino sia necessario per "copiare" i dati dal dataset al datagrid.
Nell'help di MSDN la sintassi FILL è Fill( Dataset, String) dove string è una tabella
Non ho capito cos'è LoadDataBinding, non credo sia una tabella
Credo che "da li passano i dati verso la parte grafica" , ma non ho capito

1 Risposte

  • Re: C# WPF lettura da MariaDB

    Buongiorno None,
    Il codice che usi è corretto ma è complicato, per creare la datasource per una DataGrid WPF può bastarti una DataTable. ad ogni modo cercherò di spiegarti rapidamente un paio di cose.
    La lettura dati da un database si effettua usando una Connection (nel tuo caso MySqlConnection) ed un Command, (nel tuo caso MySqlCommand)
    eseguendo il Command, viene generato un DataReader (nel tuo caso MySqlDataReader) che permette di leggere i dati restituiti dalla query.

    Il DataAdapter (nel tuo caso MySqlDataAdapter) è un oggetto implementato per permetterti di mettere in un unico contenitore quanto serve a fare il
    CRUD (create, retrieve, update, delete) dei dati della tua tabella, pertanto il dataadapter ospita 4 command uno per ognuna delle 4 operazioni.
    Se tu usi il comando Fill del dataadapter esso esegue le seguenti istruzioni:

    Crea una MysqlConnection e la apre
    Crea un MySqlCommand con la query Select sulla tua tabella
    Assegna la connection al command
    Esegue un ExecuteReader creando un MySqlDataReader (che non è altro che un cursore readonly forward only che esegue la query)
    Legge tutte le righe del datareader creando una DataTable che inserisce nel tuo dataset.
    "LoadDataBinding" è il nome che viene assegnato alla DataTable Generata.
    A questo punto, il Dataset viene assegnato come DataContext (sorgente dati) alla DataGrid e il fatto che tu abbia
    messo nel Path dell'ItemsSource il nome della tabella fa la magia e riempie la grid.

    Se vuoi dare un occhiata ad una serie di articoli che parlano dell'approccio al lavoro con i database puoi iniziare qui:
    http://www.sabrinacosolo.com/lavorare-con-i-dati-database-e-net/
    Se invece vuoi approfondire alcuni aspetti dell'uso delle DataGrid puoi guardare questa breve serie di post:
    http://www.sabrinacosolo.com/datagrid-wpf-standard-un-caso-duso-reale-parte-1/

    Saluti
Devi accedere o registrarti per scrivere nel forum
1 risposte