Frage

Ich habe zwei Access 2003-Datenbanken (fooDb und barDb).Es gibt vier Tische fooDb die verknüpften Tabellen im barDb.

Zwei Fragen:

  • Wie aktualisiere ich die Tabelle Inhalt (verknüpfte Tabellen in fooDb sollten synchronisiert werden, mit der der Inhalt der Tabelle in barDb)
  • Wie kann ich re-verknüpfen Sie die Tabelle zu einer anderen barDb Verwendung ADO.NET

Ich habe mal gegoogelt aber nichts hilfreiche Ergebnisse.Was ich herausgefunden habe ist, wie dies in VB(6) und DAO, aber ich brauche eine Lösung für C#.

War es hilfreich?

Lösung

Wenn Sie die Codierung in C#, dann ist der Zugriff nicht beteiligt, nur Jet.So können Sie verwenden, was auch immer Methode, die Sie wollen, um den Zugriff auf die Daten und dann code-updates.

Habe ich codiert diese Art der Sache in viele mal, und mein Ansatz für jede Tabelle ist:

  1. eine Abfrage ausführen, löscht aus fooDB, dass keine mehr vorhanden, in barDB.

  2. ausführen eine Abfrage, die Einsätze in fooDB-Datensätzen, die in barDB, die noch nicht vorhanden sind fooDB.

  3. Ich benutze immer code, der schreibt " on-the-fly SQL zum aktualisieren der fooDB Tabelle mit den Daten aus barDB.

Der 3. ist der hart.Ich Schleife durch die Felder-Sammlung im DBA-und SQL-Code schreiben, on the fly, wäre so etwas wie dieses:

UPDATE table2 INNER JOIN table1 ON table2.ID = table1.ID
SET table2.field1=table1.field1
WHERE (table2.field1 & "") <> (table1.field1 & "")

Für numerische Felder müssten Sie Ihre verfügbaren SQL-Dialekt die Funktion für die Konvertierung von Null auf null.Running Jet-SQL, die ich verwenden würde, Nz(), natürlich, aber das funktioniert nicht über ODBC.Nicht sicher, ob es arbeiten mit OLEDB, obwohl.

Jedenfalls, der Punkt ist für die Ausgabe einer Reihe der Spalte für Spalte SQL-updates, anstatt zu versuchen, es zu tun, Zeile für Zeile, die viel weniger effizient.

Andere Tipps

Hier ist meine Lösung Neuverknüpfung DAO Tabellen mit C #.

Meine Anwendung verwendet eine zentrale MS Access-Datenbank und 8 tatsächliche Datenbanken, die in verbunden sind. Die zentrale Datenbank lokal auf meine C # app gespeichert, aber die Anwendung ermöglicht das 8 Daten Datenbanken an anderer Stelle befindet. Beim Start relinks meine C # app DAO Tabellen in der zentralen Datenbank basierend auf app.config-Einstellungen.

Neben beachten Sie, dass diese Datenbankstruktur ist das Ergebnis meiner App ursprünglich eine MS Access App sein, die ich VB6 portiert. Ich konvertiere meine app in C #. Ich hätte MS Access in VB6 oder C # weg bewegt, aber es ist eine sehr einfache Desktop-DB-Lösung verwenden.

In der zentralen Datenbank, habe ich eine Tabelle namens linkedtables mit drei Spalten Tablename, LinkedTableName und Database.

Auf App Start, ich nenne diese Routine

            Common.RelinkDAOTables(Properties.Settings.Default.DRC_Data
                              , Properties.Settings.Default.DRC_LinkedTables
                              , "SELECT * FROM LinkedTables");

Default.DRC_Data - Aktuelle Ordner der zentralen Zugang DB Default.DRC_LinkedTables - Aktuelle Ordner von 8 Daten Datenbanken

Hier ist der Code führt die eigentliche Neuverknüpfung 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();
        }


    }

Weitere Code geschriebenen Daten aus einer Access-Datenbank zu holen und senden Sie es als Datatable

        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);
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top