我希望能够在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();
}
}
}
然而,它不起作用。如果我在访问时打开数据库连接字符串不变?
答案 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();