使用c#问题在访问中追加和删除链接表

Posted

技术标签:

【中文标题】使用c#问题在访问中追加和删除链接表【英文标题】:Appending and deleting linked tables in access using c# issue 【发布时间】:2014-05-23 14:44:44 【问题描述】:

我有一段代码遍历访问数据库中的所有链接表和表,并且对于匹配特定条件的每个表(在这种情况下都是链接),它应该添加一个新表并删除旧表。新的在 sql server 数据库上,旧的在 oracle 上,但这无关紧要。代码是:

var dbe = new DBEngine();
            Database db = dbe.OpenDatabase(@"C:\Users\x339\Documents\Test.accdb");
            foreach (TableDef tbd in db.TableDefs)
            
                if (tbd.Name.Contains("CLOASEUCDBA_T_"))
                
                    useddatabases[i] = tbd.Name;
                    string tablename = CLOASTableDictionary[tbd.Name];
                    string tablesourcename = CLOASTableDictionary[tbd.Name].Substring(6);
                    var newtable = db.CreateTableDef(tablename.Trim());
                    newtable.Connect = "ODBC;DSN=sql server copycloas;Trusted_Connection=Yes;APP=Microsoft Office 2010;DATABASE=ILFSView;";
                    newtable.SourceTableName = tablesourcename;
                    db.TableDefs.Append(newtable);
                    db.TableDefs.Delete(tbd.Name);
                    i++;
                

            
            foreach (TableDef tbd in db.TableDefs)
            
                Console.WriteLine("After loop "+tbd.Name);

             

此数据库中有 3 个链接表“CLOASEUCDBA_T_AGENT”、“CLOASEUCDBA_T_CLIENT”和“CLOASEUCDBA_T_BASIC_POLICY”。代码的问题是它完美地更新了前两个表,但由于某种未知原因,它永远找不到第三个表。然后在第二个循环中,它打印出来......它似乎只是跳过了'CLOASEUCDBA_T_BASIC_POLICY'。我真的不知道为什么。奇怪的是,如果再次运行代码,它将更改“CLOASEUCDBA_T_BASIC_POLICY”。任何帮助将不胜感激。

【问题讨论】:

在迭代集合时修改集合有时会搞砸。您可能会考虑一种稍微不同的方法:遍历 TableDefs 集合并构建您需要更改的项目的List(或者可能是Dictionary)。然后,遍历 List 并更新 TableDefs 集合中的项目。 如果您想要声誉,请将此作为答案。这样做解决了我的问题,谢谢 【参考方案1】:

在迭代集合时修改集合有时会搞砸。尝试使用稍微不同的方法:

    遍历 TableDefs 集合并构建您需要更改的项目的List(或者可能是Dictionary)。那么,

    遍历 List 并更新 TableDefs 集合中的项目。

【讨论】:

以上是关于使用c#问题在访问中追加和删除链接表的主要内容,如果未能解决你的问题,请参考以下文章

mysql远程表链接

Python 图_系列之基于<链接表;实现无向图最短路径搜索

在 c# 和 ms 访问中使用 DataGridView 超链接有困难

SQL多表链接查询、嵌入SELECT语句的子查询技术

编译访问 (mde) 文件的链接表问题

C#文件监控工具(对追加内容的监控并输出)