Ben*_*Ben 3 c# sql oledb ms-access ms-access-2007
我首先会问我在下图中的想法是否正确:

'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();
Run Code Online (Sandbox Code Playgroud)
然而,我收到了一个巨大的 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";
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我收到错误“ODBC——调用失败”。
由于我们不允许更改集合中已存在的对象,SourceTableName因此我们需要创建一个新对象、旧对象,然后创建新对象:TableDefTableDefsTableDef.Delete.Append
// This code requires the following COM reference in your project:
//
// Microsoft Office 14.0 Access Database Engine Object Library
//
// and the declaration
//
// using Microsoft.Office.Interop.Access.Dao;
//
// at the top of the class file
string tableDefName = "CLOASEUCDBA_T_BASIC_POLICY";
var dbe = new DBEngine();
Database db = dbe.OpenDatabase(@"C:\Users\xxxx\Documents\Test.accdb");
var tbdOld = db.TableDefs[tableDefName];
var tbdNew = db.CreateTableDef(tableDefName);
tbdNew.Connect = tbdOld.Connect;
tbdNew.SourceTableName = "CLOASEUCDBA_T_BILLING_INFORMATION";
db.TableDefs.Delete(tableDefName); // remove the old TableDef ...
db.TableDefs.Append(tbdNew); // ... and append the new one
db.Close();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1598 次 |
| 最近记录: |