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.