| QUOTE |
| Ce fichier a été téléchargé depuis http://www.csharpfr.com/article.aspx?ID=115 |
| CODE |
| using System; using System.Collections; using System.Data; using System.Data.OleDb; namespace WindowsApplication3 { public class BaseAccess { private string filename; private string connStr; private OleDbConnection oConn; private OleDbDataReader rdr; private OleDbCommand oCmd; // type record contenant le nom d'une colonne et sa valeur associée public struct record { public record(string column_name, object content) { this.column_name = column_name; this.content = content; } public string column_name; public object content; } // constructeur nécessitant le path du fichier base de donnée Access public BaseAccess(string filename) { this.filename = filename; this.connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+filename; } // établie une connexion sur la base Access public bool Open() { try { this.oConn = new OleDbConnection(this.connStr); this.oConn.Open(); return true; } catch { return false; } } // ferme la connexion à la base Access public bool Close() { try { this.oConn.Close(); return true; } catch { return false; } } // execute une requête SQL sur la base Access public bool Execute(string ordre) { try { this.oCmd = new OleDbCommand(ordre,this.oConn); this.rdr = this.oCmd.ExecuteReader(); return true; } catch { return false; } } // renvoi une ArrayList contenant des enregistrements de type record // contenant les différents champs de la ligne lue public ArrayList Fetch() { ArrayList row = new ArrayList(); if (this.rdr.Read()) { record rec; for (int i=0;i<this.rdr.FieldCount;i++) { rec.column_name = this.rdr.GetName(i); rec.content = this.rdr[i]; row.Add(rec); } } return row; } // renvoi une ArrayList contenant des string correspondantes aux valeurs // dans la colonne spécifiée public ArrayList ProjectionColumn(string column_name,string table_name) { ArrayList projection = new ArrayList(); if (this.Execute("SELECT "+column_name+" FROM "+table_name)) { ArrayList row; while ((row = this.Fetch()).Count > 0) { projection.Add(((record)row[0]).content); } } return projection; } // renvoi une ArrayList contenant des string correspondantes aux différents noms // de colonnes de la table passée en paramètre public ArrayList GetColumnsNames(string table_name) { ArrayList columns = new ArrayList(); if (this.Execute("SELECT * FROM "+table_name)) { for (int i=0;i<this.rdr.FieldCount;i++) { columns.Add(this.rdr.GetName(i)); } } return columns; } // renvoi une ArrayList contenant des ArrayList contenant chacune les différents // champs des colonnes de la table spécidiée en paramètre public ArrayList ProjectionTable(string table_name) { ArrayList rows = new ArrayList(); if (this.Execute("SELECT * FROM "+table_name)) { ArrayList row; while ((row = this.Fetch()).Count > 0) { rows.Add(row); } } return rows; } // renvoi une ArrayList contenant des ArrayList contenant chacune les différents // champs des colonnes passées en paramètre de la table spécidiée public ArrayList ProjectionColumns(string[] columns_name,string table_name) { ArrayList rows = new ArrayList(); if (this.Execute("SELECT "+string.Join(",",columns_name)+" FROM "+table_name)) { ArrayList row; while ((row = this.Fetch()).Count > 0) { rows.Add(row); } } return rows; } // renvoi les types des colonnes d'une table public ArrayList GetColumnsTypes(string table_name) { ArrayList types = new ArrayList(); record rec; if (this.Execute("SELECT * FROM "+table_name)) { for (int i=0;i<this.rdr.FieldCount;i++) { rec.column_name = this.rdr.GetName(i); rec.content = this.rdr.GetFieldType(i).ToString(); types.Add(rec); } } return types; } // insert une line dans une table public bool InsertRow(ArrayList columns, string table_name) { string order = "INSERT INTO "+table_name+"("; ArrayList columns_values = new ArrayList(); foreach (record rec in columns) { // on rajoute les colonnes a remplir order += rec.column_name + ","; // on fait la liste des valeurs a ajouter columns_values.Add(rec.content); } // on supprime le virgule a la fin order = order.Substring(0,order.Length-1); order += ") VALUES("; foreach (object val in columns_values) { if (val is string || val is DateTime) { order += "'" + val + "',"; } else { order += val + ","; } } order = order.Substring(0,order.Length-1); order += ")"; Console.Out.WriteLine("tentative de soumission : "+order); return this.Execute(order); } public bool DeleteRows(ArrayList rows_id, string table_name) { return false; } } } |