【问题标题】:dynamically create link tables and rename them in access 2007/2003 with c#使用 c# 动态创建链接表并在 access 2007/2003 中重命名它们
【发布时间】:2014-05-21 09:50:08
【问题描述】:

我希望能够在 accdb/mdb 现有文件中使用 C# 动态创建链接表。这可能吗?这个想法是为给定访问数据库中的每个链接表动态创建一个新的链接表,然后问题的第二部分是将这个新创建的表重命名为预先存在的表。

如果尚不清楚是否存在从一个数据库到另一个数据库的迁移,那么每个预先存在的表在新数据库中都有一个等效表,但它们需要在 Access 数据库中具有相同的名称,以便查询工作等

这可能吗?

编辑:

我创建了一个测试数据库,其中包含一个到 ODBC 数据库的链接表。我还创建了一个只计算行数的简单查询。我的 C# 代码首先运行查询,然后 尝试 使用代码更改连接字符串:

    var dbe = new DBEngine();
    Database db = dbe.OpenDatabase(@"C:\Users\x339\Documents\Test.accdb");
    foreach (TableDef tbd in db.TableDefs)
    {
        if (tbd.Connect.Length > 5)
        {
            if (tbd.Connect.Substring(0, 5).Equals("ODBC;"))
            {
                tbd.Connect = tbd.Connect.Replace("ODBC;DSN=ILACFEUC;UID=cloaseuc;DBQ=ILACFEUC;DBQ=W;APA=T;EXC=F;FEN=T;QTO=F;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=F;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=0;MLD=0;ODA=F;;TABLE=CLOASEUCDBA.T_BASIC_POLICY", "ODBC;DSN=ILACFEUC;UID=cloaseuc;DBQ=ILACFEUC;DBQ=W;APA=T;EXC=F;FEN=T;QTO=F;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=F;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=0;MLD=0;ODA=F;;TABLE=CLOASEUCDBA.T_BILLING_INFORMATION");
                tbd.RefreshLink();
            }
        }
    }

但是它不起作用。如果我在访问中打开数据库,连接字符串是否不变?

【问题讨论】:

    标签: c# sql ms-access ms-access-2007 oledb


    【解决方案1】:

    听起来您真的只是想更改现有链接表所连接的外部数据库。在这种情况下,您可以像这样在 C# 中执行此操作:

    // This code requires the following COM reference in your project:
    //
    //     Microsoft Office 14.0 Access Database Engine Object Library
    //
    // and the declaration
    //
    //     using Microsoft.Office.Interop.Access.Dao;
    //
    // at the top of the class file
    
    var dbe = new DBEngine();
    Database db = dbe.OpenDatabase(@"C:\Users\Public\FrontEnd.accdb");
    foreach (TableDef tbd in db.TableDefs)
    {
        if (tbd.Connect.Length > 10)
        {
            if (tbd.Connect.Substring(0, 10).Equals(";DATABASE="))
            {
                tbd.Connect = tbd.Connect.Replace("oldBackEnd.accdb", "newBackEnd.accdb");
                tbd.RefreshLink();
            }
        }
    }
    db.Close();
    

    【讨论】:

    • 代码中的引用是什么?我添加了 COM 参考。我还看到 Replace() 正在使用 accdb 文件。这些链接表是迁移到 ODBC sql 服务器表的链接 ODBC oracle 表。这仍然适用吗?
    • @Andy 对于 ODBC 链接表,原理相同,但 .Connect 属性看起来会有所不同(它们将以 ODBC; 而不是 ;DATABASE= 开头)。
    • 请检查编辑,我想我已经接近解决问题了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多