c# - 使用 C# 问题在 Access 中附加和删除链接表

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

我有一段代码遍历 Access 数据库中的所有链接表和表,对于符合特定条件的每个表(在本例中都是链接表),它应该添加一个新表并删除旧表。新的在 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”。任何帮助将不胜感激。

最佳答案

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

  1. 迭代 TableDefs 集合并构建 List (或者可能是 Dictionary )您需要更改的项目。然后,

  2. 迭代列表并更新 TableDefs 集合中的项目。

关于c# - 使用 C# 问题在 Access 中附加和删除链接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23832197/

相关文章:

vba - Outlook VBA Mailitem 属性 SenderEmailAddress 未正确返回地址

c# - 池中的所有连接都在使用中

C# 编译器选择了错误的扩展方法

c# - 在 Visual Studio 或 SQL Server Management Studio 中连接到 Azure SQL 数据库需要执行哪些步骤?

sql - 为自定义产品类型定义通用数据模型

mysql - 使用专有的 ODBC 驱动程序将 MySQL 连接到外部数据源

mysql - 使用 Id 从数据库中获取数据

c# - ASP.NET CORE 将 Razor View 渲染为带有 Controller 参数的字符串

包含多个 SELECT 语句的 SQL IN 语句

ms-access - 如何以编程方式获取SSIS包中的MS Access表列表?