2009-08-07 1 views
0

Ich musste ein Formular erstellen, in dem ich MDB-Dateien durchsuchen und öffnen muss ---> ich habe diesen Teil usin oprnfile dialog!Wie man Tabellen einer Zugriffsdb in eine Listbox mit C# bekommt?

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(); 

} 

} 

** das ist mein Code so weit !!!

jetzt muss ich 3 Listenfelder machen !! 1., um die Tabellennamen der db anzuzeigen! 2. bis Feldnamen anzeigen, wenn auf den Tabellennamen geklickt wird !!! 3. um Attribute auf Feldern anzuzeigen, klicken Sie darauf! v kann die Attributwerte bearbeiten und beim Klicken auf die Schaltfläche "Speichern" sollte die Datenbank aktualisiert werden !!!

Antwort

0

Verwenden Sie die Klassen System.Data.OleDb.*, um die Daten aus der Zugriffsdatei abzurufen.

Beispiel:

//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

Verwenden System.Data.OleDb eine Verbindung mit neuer OleDbConnection (Connection) zu öffnen. Die Verbindungszeichenfolge sollte "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = [PathToMDBFile]" sein

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(); 

Das wird Ihnen den ersten Wert in der Column1

benannte Spalte erhalten
5

Diese Klasse sollte bekommen Sie die Informationen, die Sie brauchen.

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; 
     } 
    } 

Füllen Sie die Tabellenliste so.

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

Füllen Sie die Spalten so.

Sie können diese Methode auch verwenden, um eine DataTable zurückzugeben, die alle Arten von Informationen zu jeder Spalte enthält.

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

Wenn Ihr versucht, eine Microsoft Access-Datei dieser Anbieter für mich gearbeitet zu laden: „Microsoft.ACE.OLEDB.12.0“ –

+0

Danke @ Tester101 die mir sicherlich geholfen. –

Verwandte Themen