使用C#更改Access 2007中链接表的源表

时间:2014-05-22 08:56:33

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

我首先要问我是否正确地认为在下图中: enter image description here

' TABLE = CLOASEUCDBA.T_BASIC_POLICY'不是连接字符串的一部分?实际上它是源表名?

我希望将其更改为同一数据库中的另一个链接表。连接字符串应该相同,并且ACCESS中显示的名称应该相同。唯一的区别应该是它实际引用另一个表格,当然如果你打开表格,它将包含不同的字段和数据。

我的远程代码是:

    var dbe = new DBEngine();
    Database db = dbe.OpenDatabase(@"C:\Users\xxxx\Documents\Test.accdb");
    foreach (TableDef tbd in db.TableDefs)
    {

        if (tbd.Name.Contains("CLOASEUCDBA_T_BASIC_POLICY"))
        {
            tbd.SourceTableName = "CLOASEUCDBA_T_BILLING_INFORMATION"; 
        }
    }
    db.Close();

但是我得到了一个很大的COMException"一旦对象是集合的一部分,就不能设置这个属性。"。我不确定为什么以及我在网上找到的所有例子都是用VB / VBA编写的,而且我对此的曝光非常有限。任何帮助表示赞赏。

编辑: 我尝试使用代码走另一条路,但没有取得更大的成功:

        if (tbd.Name.Contains("CLOASEUCDBA_T_BASIC_POLICY"))
        {
            var newtable = db.CreateTableDef("this is a new table");
            newtable.Name = "new table";
            newtable.Connect = tbd.Connect;
            newtable.SourceTableName = "CLOASEUCDBA_T_BILLING_INFORMATION";
            db.TableDefs.Append(newtable);
            //tbd.SourceTableName = "CLOASEUCDBA_T_BILLING_INFORMATION"; 
        }

在这种情况下,我收到错误" ODBC - 调用失败。"

1 个答案:

答案 0 :(得分:4)

由于我们不允许更改SourceTableName集合中已存在的TableDef对象的TableDefs,因此我们需要创建一个新的TableDef对象,{ {1}}旧的,然后.Delete新的:

.Append