使用c#动态创建链接表并在访问2007/2003中重命名它们

时间:2014-05-21 09:50:08

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

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

如果尚未清除,则会从一个数据库迁移到另一个数据库,因此每个预先存在的表在新数据库中都有一个等效表,但它们需要在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();
            }
        }
    }
然而,它不起作用。如果我在访问时打开数据库连接字符串不变?

1 个答案:

答案 0 :(得分:0)

听起来您真的只想更改现有链接表所连接的外部数据库。在这种情况下,您可以在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();