Domanda

Esiste un modo semplice per leggere un intero file di Access (.mdb) in un DataSet in .NET (in particolare C# o VB)?

O almeno per ottenere un elenco di tabelle da un file di accesso in modo da poterlo scorrere e aggiungerle una alla volta in un DataSet?

È stato utile?

Soluzione

Grazie per i suggerimentiSono stato in grado di utilizzare questi esempi per mettere insieme questo codice, che sembra ottenere ciò che sto cercando.

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

Altri suggerimenti

Dovresti essere in grado di accedervi utilizzando un file Connessione OleDb.

Ecco un tutorial sull'accesso al DB utilizzandolo per i file MS Access.

Per quanto riguarda l'ottenimento dei nomi delle tabelle, ai tempi di VB6 ho sempre usato ADOX, non sono sicuro di come lo facciano ora in .NET.Anche se so che c'è una tabella di sistema nel file di accesso, voglio dire "mso...".Ho cercato su Google!

MODIFICARE

Ah ah! msysobjects !!xD

MSDN contiene un articolo su come utilizzare ADO.NET per connettere e modificare i record in un database di Access.Una volta stabilita la connessione OleDB, puoi creare facilmente il tuo DataReader/DataAdapter ed elaborarlo secondo necessità.

MODIFICARE:Gah!Che tu sia maledetto Rob e le tue abilità divine nella digitazione!!!8^D

C'è una discussione su questo punto in Meno di punto.Ecco un esempio di codice dalla discussione.

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

La tua domanda originale così come è formulata non ha senso:

Esiste un modo semplice per leggere un intero file di Access (.mdb) in...

Tu certamente non desidera l'intero contenuto del file MDB.Ciò che desideri è il contenuto delle tue tabelle di dati archiviate nell'MDB.Tieni presente che non vuoi nemmeno il contenuto delle tabelle di sistema.

Il punto chiave:

Stai chiedendo di JET, non di ACCESS.

Jet è il motore di database fornito come archivio dati predefinito di Access (e in cui sono archiviati gli oggetti di Access).Ma "Accesso" significa qualcosa di molto più che semplici tabelle di dati.

Ogni volta che fai una domanda e confondi Access e Jet, probabilmente otterrai almeno alcune risposte inutili.

E verrai rimproverato da persone come me, perché gli sviluppatori dovrebbero davvero saperlo meglio per non offuscare le distinzioni cruciali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top