1

我有一个 MS Access MDB,它有一个来自 .csv 的链接表。我必须更改路径,所以我必须使用链接表管理器来更新 csv 的路径。

有什么方法可以使用 C# 以编程方式做到这一点吗?

我曾尝试使用此链接中的帮助,但它是关于 Sql 和 MsAccess 的。 在此处输入链接描述

先感谢您。

在此处输入图像描述

4

1 回答 1

2

假设您有一个名为 [Foo] 的现有链接表,它指向以下 CSV 文件:

C:\Users\Gord\Desktop\foo.csv

Access 将链接信息存储在名为“Foo”的 TableDef 对象中,该对象具有以下属性:

.Name = "Foo"
.Connect = "Text;DSN=Foo Link Specification;FMT=Delimited;HDR=NO;IMEX=2;CharacterSet=437;ACCDB=YES;DATABASE=C:\Users\Gord\Desktop"
.SourceTableName = "foo.csv"

注意,property的参数表示CSV文件所在的DATABASE=文件夹,property表示CSV文件的名称.Connect.SourceTableName

如果您将该文件从 移动C:\Users\Gord\Desktop到 ,C:\Users\Public那么您需要做的就是使用新位置更新属性的DATABASE=参数:.Connect

// required COM reference: Microsoft Office 14.0 Access Database Engine Object Library
//
// using Microsoft.Office.Interop.Access.Dao; ...
var dbe = new DBEngine();
Database db = dbe.OpenDatabase(@"C:\Users\Public\Database1.accdb");
TableDef tbd = db.TableDefs["Foo"];
string oldConnect = tbd.Connect;
char[] delimiter = { ';' };
string[] connectParams = oldConnect.Split(delimiter);
for (int i = 0; i < connectParams.Length; i++)
{
    if (connectParams[i].StartsWith("DATABASE=", StringComparison.InvariantCultureIgnoreCase))
    {
        connectParams[i] = @"DATABASE=C:\Users\Public";
        break;
    }
}
string newConnect = String.Join(Convert.ToString(delimiter[0]), connectParams);
tbd.Connect = newConnect;
tbd.RefreshLink();
db.Close()
于 2015-04-07T13:24:00.637 回答