Frage

Gibt es eine einfache Möglichkeit, eine gesamte Access-Datei (.mdb) in ein DataSet in .NET (insbesondere C# oder VB) einzulesen?

Oder zumindest eine Liste von Tabellen aus einer Zugriffsdatei abzurufen, damit ich sie durchlaufen und sie einzeln zu einem DataSet hinzufügen kann?

War es hilfreich?

Lösung

Danke für die Vorschläge.Ich konnte diese Beispiele verwenden, um diesen Code zusammenzustellen, der anscheinend das erreicht, was ich suche.

Using cn = New OleDbConnection(connectionstring)
    cn.Open()
    Dim ds As DataSet = new DataSet()

    Dim Schema As DataTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
    For i As Integer = 0 To Schema.Rows.Count - 1
        Dim dt As DataTable = New DataTable(Schema.Rows(i)!TABLE_NAME.ToString())

        Using adapter = New OleDbDataAdapter("SELECT * FROM " + Schema.Rows(i)!TABLE_NAME.ToString(), cn)
            adapter.Fill(dt)
        End Using

        ds.Tables.Add(dt)
    Next i
End Using

Andere Tipps

Sie sollten über eine darauf zugreifen können OleDbConnection.

Hier ist ein Tutorial zum DB-Zugriff unter Verwendung für MS Access-Dateien.

Was das Abrufen der Tabellennamen angeht, habe ich zu meinen VB6-Tagen immer ADOX verwendet, bin mir aber nicht sicher, wie sie das jetzt in .NET machen.Obwohl ich weiß, dass die Zugriffsdatei eine Systemtabelle enthält, möchte ich „mso ...“ sagen.Ich google!

BEARBEITEN

Ah ha! msysobjects !!xD

MSDN hat einen Artikel über die Verwendung von ADO.NET zum Verbinden und Bearbeiten von Datensätzen in einer Access-Datenbank.Sobald Ihre OleDB-Verbindung hergestellt ist, können Sie ganz einfach Ihren DataReader/DataAdapter erstellen und nach Bedarf verarbeiten.

BEARBEITEN:Gah!Verfluche dich, Rob, und deine gottähnlichen Schreibfähigkeiten!!!8^D

Zu diesem Punkt gibt es eine Diskussion Weniger als Punkt.Hier ist ein Beispielcode aus der Diskussion.

   public DataTable GetColumns(string tableName)
    {
        string[] restrictions = new string[4];
        restrictions[2] = tableName;

        _connDb.Open();

        DataTable mDT = _connDb.GetSchema("Columns", restrictions);

        _connDb.Close();

        return mDT;
    }

Ihre ursprüngliche Frage ist in der Formulierung Unsinn:

Gibt es eine einfache Möglichkeit, eine gesamte Access-Datei (.mdb) in ... einzulesen?

Du sicherlich nicht Ich möchte den gesamten Inhalt der MDB-Datei haben.Was Sie benötigen, ist der Inhalt Ihrer Datentabellen, die in der MDB gespeichert sind.Bedenken Sie, dass Sie auch nicht auf den Inhalt der Systemtabellen zugreifen möchten.

Der entscheidende Punkt:

Sie fragen nach JET, nicht nach ACCESS.

Jet ist die Datenbank-Engine, die als Standarddatenspeicher von Access geliefert wird (und in der die eigenen Objekte von Access gespeichert werden).Aber „Zugriff“ bedeutet viel mehr als nur die Datentabellen.

Wann immer Sie eine Frage stellen und Access und Jet verwechseln, werden Sie wahrscheinlich zumindest einige unbrauchbare Antworten erhalten.

Und Sie werden von Leuten wie mir ausgeschimpft werden, weil Entwickler es wirklich besser wissen sollten, als wichtige Unterscheidungen zu verschleiern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top