C# 在access 2007/2003中使用c动态创建链接表并重命名它们#
我希望能够在accdb/mdb现有文件中使用C#动态创建链接表。这可能吗?这个想法是,对于给定access数据库中已经存在的每个链接表,动态创建一个新的链接表,然后问题的第二部分是将这个新创建的表重命名为预先存在的表 如果还不清楚是否正在从一个数据库迁移到另一个数据库,那么每个预先存在的表在新数据库中都有一个等效的表,但它们在Access数据库中需要具有相同的名称,以便查询工作等 这可能吗 编辑: 我创建了一个测试数据库,其中包含一个到ODBC数据库的链接表。我还创建了一个简单的查询,只对行进行计数。我的C#代码首先运行查询,然后尝试使用代码更改连接字符串:C# 在access 2007/2003中使用c动态创建链接表并重命名它们#,c#,sql,ms-access,ms-access-2007,oledb,C#,Sql,Ms Access,Ms Access 2007,Oledb,我希望能够在accdb/mdb现有文件中使用C#动态创建链接表。这可能吗?这个想法是,对于给定access数据库中已经存在的每个链接表,动态创建一个新的链接表,然后问题的第二部分是将这个新创建的表重命名为预先存在的表 如果还不清楚是否正在从一个数据库迁移到另一个数据库,那么每个预先存在的表在新数据库中都有一个等效的表,但它们在Access数据库中需要具有相同的名称,以便查询工作等 这可能吗 编辑: 我创建了一个测试数据库,其中包含一个到ODBC数据库的链接表。我还创建了一个简单的查询,只对行进行
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();
}
}
}
但是它不起作用。如果我在access中打开数据库,连接字符串将保持不变?听起来您只是想更改现有链接表所连接的外部数据库。在这种情况下,您可以用C#这样做:
//此代码在项目中需要以下COM引用:
//
//Microsoft Office 14.0 Access数据库引擎对象库
//
//和宣言
//
//使用Microsoft.Office.Interop.Access.Dao;
//
//在类文件的顶部
var dbe=new DBEngine();
Database db=dbe.OpenDatabase(@“C:\Users\Public\FrontEnd.accdb”);
foreach(TableDef待定,单位为db.TableDefs)
{
如果(待定连接长度>10)
{
if(tbd.Connect.Substring(0,10).Equals(“;DATABASE=”))
{
tbd.Connect=tbd.Connect.Replace(“oldbend.accdb”、“newBackEnd.accdb”);
待定。刷新链接();
}
}
}
db.Close();
代码中的引用是什么?我已经添加了COM引用。我还看到Replace()接受accdb文件。这些链接表是迁移到ODBC sql server表的链接ODBC oracle表。这是否仍然适用?@Andy对于ODBC链接表,原理相同,但.Connect
属性看起来不同(它们将以ODBC;
而不是;DATABASE=
)开始)。请检查编辑,我想我已接近解决问题。