Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在access 2007/2003中使用c动态创建链接表并重命名它们#_C#_Sql_Ms Access_Ms Access 2007_Oledb - Fatal编程技术网

C# 在access 2007/2003中使用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数据库的链接表。我还创建了一个简单的查询,只对行进行

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

如果还不清楚是否正在从一个数据库迁移到另一个数据库,那么每个预先存在的表在新数据库中都有一个等效的表,但它们在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();
            }
        }
    }

但是它不起作用。如果我在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=
)开始)。请检查编辑,我想我已接近解决问题。