Pagina personale di:
Carlo Vecchio
appunti di C#, R, SQL Server, ASP.NET, algoritmi, numeri
Vai ai contenuti

C# - Lavorare con i database Access MDB

C#

Creazione di un database

  • Non esistono classi native nel Framework che permettano la creazione di un database Access.
  • Occorre quindi fare riferimento alla DLL delle estensioni ADO, chiamata 'adox.dll'.

   // Creazione database
   // Aggiungere ai riferimenti 'Microsoft ADO Ext. 2.8 for DDL and Security'.         
   ADOX.CatalogClass cat = new ADOX.CatalogClass();
   cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Temp\\db_name.mdb;Jet OLEDB:Engine Type = 5");
   cat = null;

Aggiunta di una tabella

   OleDbConnection cn = new OleDbConnection();
   cn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Temp\\db_name.mdb";
   cn.Open();
   OleDbCommand cm = new OleDbCommand();
   cm.CommandText = "CREATE TABLE tabella1";
   cm.Connection = cn;
   cm.ExecuteNonQuery();

                 

   cn.Close();

Aggiunta di una colonna

   OleDbConnection cn = new OleDbConnection();
   cn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Temp\\db_name.mdb";
   cn.Open();
   OleDbCommand cm = new OleDbCommand();
   cm.CommandText = "ALTER TABLE tabella1 ADD COLUMN col_1 TEXT(30) NOT NULL DEFAULT aaa";
   cm.Connection = cn;
   cm.ExecuteNonQuery();

                 

   cn.Close();

Query di esecuzione

   OleDbConnection cn = new OleDbConnection();
   cn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Temp\\db_name.mdb";
   cn.Open();
   OleDbCommand cm = new OleDbCommand();
   cm.CommandText = "INSERT INTO tabella1 VALUES ('aaa', 'bbb', 111)";
   cm.Connection = cn;
   int rowsAffected = cm.ExecuteNonQuery();

                 

   cn.Close();


  • Alternativa.


   using (OleDbConnection cn = new OleDbConnection())
   {
       cn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Db1.mdb";
       cn.Open();
       using (OleDbCommand cm = new OleDbCommand())
       {
           cm.CommandText = "UPDATE tabella1 SET Campo1 = Campo1 + 1 ";
           cm.Connection = cn;
           int rowsAffected = cm.ExecuteNonQuery();
       }
   }


Query di selezione

  • Nell'esempio si estraggono i record di un database tramite un oggetto OleDbDataReader.
  • I campi sono poi scritti in un oggetto DataGridView.

   dgv1.Rows.Clear();
   OleDbConnection cn = new OleDbConnection();
   cn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Temp\\db_name.mdb";
   cn.Open();
   OleDbCommand cm = new OleDbCommand();
   cm.CommandText = "SELECT * FROM tabella1";
   cm.Connection = cn;
   OleDbDataReader dr = cm.ExecuteReader();
   while (dr.Read())
   {
       DataGridViewRow dgr = new DataGridViewRow();
       dgv1.Rows.Add(dgr);
       dgv1["COL_NOME", dgv1.Rows.Count - 1].Value = dr["Nome"].ToString();
       dgv1["COL_COGNOME", dgv1.Rows.Count - 1].Value = dr["Cognome"].ToString();
       dgv1["COL_NUMERO", dgv1.Rows.Count - 1].Value = (Int32)dr["Numero"];
       dgv1.Rows[dgv1.Rows.Count - 1].Height = 18;
   }
   dr.Close();
   cn.Close();

  • Alternativa.

   using (OleDbConnection cn = new OleDbConnection())
   {
       cn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Db1.mdb";
       cn.Open();
       using (OleDbCommand cm = new OleDbCommand())
       {
           cm.CommandText = "SELECT Campo1 FROM Tabella1";
           cm.Connection = cn;

           OleDbDataReader dr = cm.ExecuteReader();
           if (dr.Read())
           {
               lblValue.Text = dr["Campo1"].ToString();
           }
       }
   }

In caso di errore
Provider non registrato
  • Se nell'esecuzione del programma, si ha l'errore System.InvalidOperationException: 'Il provider 'Microsoft.Jet.OLEDB.4.0' non è registrato nel computer locale.', la causa potrebbe essere nel fatto che OLEDB.4.0 non funziona a 64 bit ma a 32 bit.
  • Per risolvere il problema quindi bisogna compilare il programma a 32 bit.
  • Per fare questo, menu 'Progetto -> Proprietà di nome_progetto'.
  • Nella form che si apre, selezionare 'Compilazione' e impostare come 'Piattaforma di destinazione', il valore x86.

Query aggiornabile
  • Se nell'esecuzione del programma, si ha l'errore Per l'operazione è necessaria una query aggiornabile, la causa potrebbe essere nei diritti del file MDB.
  • Infatti il file del database (*.mdb) è sicuramente scrivibile dall'autore del file, ma non è detto che gli altri utenti possano scriverci.
  • Per risolvere il problema bisogna quindi cambiare i diritti di accesso al file.
  • Per fare questo fare click destro sul file e dal menu contestuale cliccare su 'Proprietà'. Selezionare la scheda 'Sicurezza', selezionare poi 'Users' e impostare ad essi i diritti di scrittura.


© 2022 Carlo Vecchio
Torna ai contenuti