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

时间:2014-05-23 14:44:44

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

我有一段代码遍历访问数据库中的所有链接表和表,并且对于符合特定条件的每个表(在本例中都链接),它应该添加新表并删除旧表。新的是在一个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 个答案:

答案 0 :(得分:1)

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

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

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