Hier ist meine Lösung zum Verknüpfen von DAO-Tabellen mit C#.
Meine Anwendung verwendet eine zentrale MS Access-Datenbank und 8 tatsächliche Datenbanken, die verknüpft sind. Die zentrale Datenbank wird lokal in meiner C# -App gespeichert, aber die Anwendung ermöglicht, dass die 8 Daten-Datenbanken woanders liegen. Beim Start verbindet meine C# -App DAO-Tabellen in der zentralen Datenbank basierend auf app.config-Einstellungen neu.
Abgesehen davon ist diese Datenbankstruktur das Ergebnis meiner App, die ursprünglich eine MS Access App war, die ich nach VB6 portierte. Ich konvertiere gerade meine App in C#. Ich könnte MS Access in VB6 oder C# verschoben haben, aber es ist eine sehr einfach zu bedienende Desktop-DB-Lösung.
In der zentralen Datenbank habe ich eine Tabelle mit dem Namen "Linkedtables" mit drei Spalten TableName, LinkedTableName und DatabaseName erstellt.
Auf App Start, nenne ich diese Routine
Common.RelinkDAOTables(Properties.Settings.Default.DRC_Data
, Properties.Settings.Default.DRC_LinkedTables
, "SELECT * FROM LinkedTables");
Default.DRC_Data - Aktuelle Ordner des zentralen Zugang DB Default.DRC_LinkedTables - Aktuelle Ordner von 8 Daten Datenbanken
Hier Code führt die eigentlichen erneutes Verknüpfen der DAO Tabellen in C#
public static void RelinkDAOTables(string MDBfile, string filepath, string sql)
{
DataTable linkedTables = TableFromMDB(MDBfile, sql);
dao.DBEngine DBE = new dao.DBEngine();
dao.Database DB = DBE.OpenDatabase(MDBfile, false, false, "");
foreach (DataRow row in linkedTables.Rows)
{
dao.TableDef table = DB.TableDefs[row["Name"].ToString()];
table.Connect = string.Format(";DATABASE={0}{1} ;TABLE={2}", filepath, row["database"], row["LinkedName"]);
table.RefreshLink();
}
}
Zusatzcode geschriebenen Daten aus einer Access-Datenbank zu holen und senden sie es als DATAT in der Lage
public static DataTable TableFromOleDB(string Connectstring, string Sql)
{
try
{
OleDbConnection conn = new OleDbConnection(Connectstring);
conn.Open();
OleDbCommand cmd = new OleDbCommand(Sql, conn);
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
DataTable table = new DataTable();
adapter.Fill(table);
return table;
}
catch (OleDbException)
{
return null;
}
}
public static DataTable TableFromMDB(string MDBfile, string Sql)
{
return TableFromOleDB(string.Format(sConnectionString, MDBfile), Sql);
}
Hallo garycindel, ich sah nur Ihre Post jetzt, aber es war wirklich hilfreich und in der Tat sollte es die richtige Antwort sein. Leider habe ich diese Frage als Unreg gepostet und kann nun die "richtige Antwort" -Marke nicht mehr ändern, aber ich gab dir eine Auffrischung dafür :) Danke für diese Antwort! – Christian
@Christian --- Ich weiß, dass dieser Thread jenseits alt ist, aber was ist, wenn Sie eine Tabelle tatsächlich verknüpfen wollten, um nicht erneut zu verknüpfen? – user2676140
@ user2676140 Ich sehe nur Ihren Kommentar jetzt, aber wenn Sie eine verknüpfte Tabelle in C# erstellen möchten, müssen Sie grundsätzlich in ADOX einbinden. Hier ist der VB6-Code, der zeigt, wie man die ADOX-Klassen benutzt: https://support.microsoft.com/de-de/help/230588/how-to-link-and-refresh-linked-jet-tables-using-adox Sie können diesen Code leicht in C# übertragen – Christian