2009-08-07 5 views
0

J'ai eu besoin de créer un formulaire dans lequel je dois parcourir et ouvrir les fichiers mdb ---> j'ai fait cette partie usin dialogue oprnfile!comment obtenir les tables d'un accès db dans une zone de liste en utilisant C#?

private void button1_Click(object sender, EventArgs e) 

{ 

OpenFileDialog oDlg = new OpenFileDialog(); 

oDlg.Title = "Select MDB"; 

oDlg.Filter = "MDB (*.Mdb)|*.mdb"; 

oDlg.RestoreDirectory = true; 

string dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 

oDlg.InitialDirectory = dir; 

DialogResult result = oDlg.ShowDialog(); 

if (result == DialogResult.OK) 

{ 

textBox1.Text = oDlg.FileName.ToString(); 

} 

} 

** ceci est mon code jusqu'à présent !!!

maintenant je dois faire 3 boîtes de liste !! 1er à afficher les noms de table de la db! 2ème à afficher les noms de champs lorsque vous cliquez sur le nom de la table !!! 3ème pour afficher les attributs sur les champs en cliquant dessus! v peut éditer les valeurs d'attribut et sur clickin du bouton de sauvegarde il devrait mettre à jour la base de données !!!

Répondre

0

Utilisez les classes System.Data.OleDb.* pour obtenir les données du fichier d'accès.

Exemple:

//Create the OleDbConnection object 
//and associate it with our database 
using(OleDbConnection conn = new OleDbConnection(
    "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source="+textBox1.Text)){ 

//Open the database connection 
conn.Open(); 

//Create an OleDbCommand object and 
//pass it the SQL read query and the connection to use 
OleDbCommand cmd = new OleDbCommand(sqlstr,conn); 

//Procure the OleDbDataReader object to browse the recordset 
OleDbDataReader rdr = cmd.ExecuteReader(); 

//Keep reading records in the forward direction 
while (rdr.Read()) 
{ 
    //Use one of the various methods available to read the data 
    //Eg:- GetValue, GetValues, Item etc. 
. . . 
. . .  
} 

} 
0

Utilisation System.Data.OLEDB pour ouvrir une connexion avec le nouveau OleDbConnection (connectionString). La chaîne de connexion doit être "provider = Microsoft.Jet.OLEDB.4.0; Data Source = [PathToMDBFile]"

var conn = new OleDbConnection(connectionString); 
var ds = new DataSet(); 
       var adapter = new OleDbDataAdapter("SELECT Column1 FROM Table1", conn); 
       conn.Open(); 
       adapter.Fill(ds); 
       conn.Close(); 
var value = ds.Tables[0].Rows[0]["Column1"].ToString(); 

que vous obtiendrez la première valeur dans la colonne nommée Column1

5

Cette classe devrait vous obtenez l'information dont vous avez besoin.

public static class DatabaseInfoCollector 
    {  
     public static System.Collections.Generic.List<string> GetTables(string file) 
     { 
      System.Data.DataTable tables; 
      using(System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file)) 
      { 
       connection.Open(); 
       tables = connection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,new object[]{null,null,null,"TABLE"}); 
      } 
      System.Collections.Generic.List<string> Tables = new System.Collections.Generic.List<string>(); 
      for (int i = 0; i < tables.Rows.Count; i++) 
      { 
       Tables.Add(tables.Rows[i][2].ToString()); 
      } 
      return Tables; 
     }  

     public static System.Collections.Generic.List<string> GetColumnNames(string file, string table) 
     { 
      System.Data.DataTable dataSet = new System.Data.DataTable();    
      using(System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file)) 
      { 
       connection.Open(); 
       System.Data.OleDb.OleDbCommand Command = new System.Data.OleDb.OleDbCommand("SELECT * FROM " + table,connection); 
       using(System.Data.OleDb.OleDbDataAdapter dataAdapter = new System.Data.OleDb.OleDbDataAdapter(Command)) 
       { 
        dataAdapter.Fill(dataSet); 
       } 
      } 
      System.Collections.Generic.List<string> columns = new System.Collections.Generic.List<string>(); 
      for(int i = 0; i < dataSet.Columns.Count; i ++) 
      { 
       columns.Add(dataSet.Columns[i].ColumnName); 
      } 
      return columns; 
     } 
    } 

Remplissez la liste des tableaux comme ceci.

System.Collections.Generic.List<string> Tables = DatabaseInfoCollector.GetTables(textBox1.Text); 
foreach(string table in Tables) 
{ 
    cboTable.Items.Add(table); 
} 

Remplissez les colonnes comme ceci.

System.Collections.Generic.List<string> Columns = DatabaseInfoCollector.GetColumnNames(textBox1.Text,cboTable.SelectedItem.ToString()); 
foreach(string column in Columns) 
{ 
    cboColumns.Items.Add(column); 
} 

Vous pouvez également utiliser cette méthode pour renvoyer un DataTable contenant toutes sortes d'informations sur chaque colonne.

public static System.Data.DataTable GetSchemaData(string file) 
{ 
    System.Data.DataTable columns; 
    using(System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file)) 
    { 
     connection.Open(); 
     columns = connection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Columns,new object[]{null,null,null,null}); 
    } 
    return columns; 
} 
+0

Si vous essayez de charger un fichier Microsoft Access ce fournisseur a fonctionné pour moi: « Microsoft.ACE.OLEDB.12.0 » –

+0

Merci @ Tester101 le m'a certainement aidé. –

Questions connexes