以编程方式使用C#更新MS Access数据库中的链接表

4 .net c# ado.net ms-access dao

我有两个Access 2003数据库(fooDbbarDb).其中有四个表fooDb链接到表中barDb.

两个问题:

  • 如何更新表格内容(链接表格fooDb应与表格内容同步barDb)
  • 如何将表重新链接到其他barDb使用ADO.NET

我用谷歌搜索,但没有得到任何有用的结果.我发现如何在VB(6)和DAO中实现这一点,但我需要一个C#的解决方案.

Gar*_*del 5

这是我使用C#重新链接DAO表的解决方案.

我的应用程序使用一个中央MS Access数据库和8个链接的实际数据库.中央数据库本地存储到我的C#应用​​程序,但应用程序允许8个数据数据库位于其他位置.在启动时,我的C#app基于app.config设置重新链接中央数据库中的DAO表.

除了注意,这个数据库结构是原本是一个MS访问应用程序,我移植到VB6我的应用程序的结果.我目前正在将我的应用转换为C#.我可以移出在VB6或C#的MS Access,但它是一个非常易于使用的桌面数据库解决方案.

在中央数据库中,我创建了一个名为linkedtables有三列表名,LinkedTableName和数据库名称表.

在App开始时,我称之为例程

            Common.RelinkDAOTables(Properties.Settings.Default.DRC_Data
                              , Properties.Settings.Default.DRC_LinkedTables
                              , "SELECT * FROM LinkedTables");
Run Code Online (Sandbox Code Playgroud)

Default.DRC_Data - 中央访问DB Default.DRC_LinkedTables的当前文件夹 - 8个数据的数据库的当前文件夹

这是代码在C#中实际重新链接DAO表

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


    }
Run Code Online (Sandbox Code Playgroud)

编写附加代码以从访问数据库获取数据并将其作为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);
    }
Run Code Online (Sandbox Code Playgroud)

  • 嗨garykindel,我现在只看到你的帖子,但它真的很有用,事实上它应该是正确的答案.不幸的是我发布这个问题作为unreg,现在我不能再改变"正确答案"标记,但我给了你一个upvote来弥补它:)谢谢你的回答! (3认同)