Leggere il file di accesso in un set di dati
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?
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.