2013-06-10 1 views
7

Ich habe Zugriff auf Datenbank-Datei mit 7 Tabellen, aber ich weiß nicht, wie Sie eine Verbindung herstellen und alle Tabellen anzeigen, wenn jemand mir helfen kann?Wie verbinde ich Access-Datenbank in C#

dies ist mein Code, aber es zeigt nichts

private void button1_Click(object sender, EventArgs e) 
{ 
    OleDbConnection conn = new OleDbConnection(); 
    String connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\Tables.accdb;Persist Security Info=True"; 
    string sql = "SELECT Clients FROM Tables"; 
    conn.ConnectionString = connection; 
    conn.Open(); 
    DataSet ds = new DataSet(); 
    DataGridView dataGridView1 = new DataGridView(); 
    BindingSource bSource = new BindingSource(); 
    OleDbDataAdapter adapter = new OleDbDataAdapter(sql,conn); 
    adapter.Fill(ds); 
    //conn.Close();        
    dataGridView1.DataSource = ds; 
+0

Und was ist der Fehler, den dieser Code wirft? ** Bitte * bearbeite * die Frage mit diesen Informationen. ** –

+0

Hast du gesehen http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/6fde18c2-3e82-4a75-acf5-9aa5dd2165c2/ ? –

+0

Verwenden Sie stattdessen "Provider = Microsoft.Jet.OLEDB.4.0"? –

Antwort

13

diesen Code Versuchen Sie,

public void ConnectToAccess() 
{ 
    System.Data.OleDb.OleDbConnection conn = new 
     System.Data.OleDb.OleDbConnection(); 
    // TODO: Modify the connection string and include any 
    // additional required properties for your database. 
    conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + 
     @"Data source= C:\Documents and Settings\username\" + 
     @"My Documents\AccessFile.mdb"; 
    try 
    { 
     conn.Open(); 
     // Insert code to process data. 
    } 
     catch (Exception ex) 
    { 
     MessageBox.Show("Failed to connect to data source"); 
    } 
    finally 
    { 
     conn.Close(); 
    } 
} 

http://msdn.microsoft.com/en-us/library/5ybdbtte(v=vs.71).aspx

+0

Das funktioniert nur für Access-Datenbanken älter als Access 2007 – Fandango68

2

Sie bauen ein Datagridview on the fly und die Datasource dafür. Das ist gut, aber fügen Sie dann das DataGridView der Controls-Auflistung des Hosting-Formulars hinzu?

this.Controls.Add(dataGridView1); 

Durch die Art und Weise ist der Code ein wenig verwirrt

String connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\Tables.accdb;Persist Security Info=True"; 
string sql = "SELECT Clients FROM Tables"; 
using(OleDbConnection conn = new OleDbConnection(connection)) 
{ 
    conn.Open(); 
    DataSet ds = new DataSet(); 
    DataGridView dataGridView1 = new DataGridView(); 
    using(OleDbDataAdapter adapter = new OleDbDataAdapter(sql,conn)) 
    { 
     adapter.Fill(ds); 
     dataGridView1.DataSource = ds; 
     // Of course, before addint the datagrid to the hosting form you need to 
     // set position, location and other useful properties. 
     // Why don't you create the DataGrid with the designer and use that instance instead? 
     this.Controls.Add(dataGridView1); 
    } 
} 

EDIT Nach den Kommentaren unten klar ist, dass es ein wenig Verwirrung zwischen dem Dateinamen (TABLES.ACCDB) und der Name der Tabelle CLIENTS.
The SELECT statement definiert ist (in seiner Grundform) als

SELECT field_names_list FROM _tablename_ 

so die korrekte Syntax alle Clients Daten zu verwenden, um für das Abrufen

string sql = "SELECT * FROM Clients"; 

wo die * bedeutet -> alle Felder, die in die Tabelle

+0

Danke Steve, ich habe einen Fehler adaper.Fill (ds); Das Microsoft Access-Datenbankmodul kann die Imput-Tabelle oder die Abfrage 'Tabellen' nicht optimieren. Stellen Sie sicher, dass sie existiert und der Name korrekt geschrieben ist. – user2386687

+0

Der Fehler scheint mir klar. Haben Sie in Ihrer Table.accdb eine Tabelle namens 'Tables'? Oder verwechseln Sie den Namen der Datei für die Datentabelle? – Steve

+0

Die Tabellen sind richtig, aber ich denke, wenn ich versuche, Client-Tabelle aus Datei in ausgewählten Clients aus Tabellen zu verbinden, etwas, was ich falsch mache, oh, ich kenne dieses Zeug nicht. Auch wenn ich versuche zu erklären, weiß ich nicht sehr gut – user2386687