使用C#更新Access中的链接CSV文件

时间:2015-04-06 14:05:48

标签: c# ms-access linked-tables

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

有没有办法以编程方式使用C#?

我尝试使用此链接中的帮助,但它是关于Sql和MsAccess的。 enter link description here

提前谢谢。

enter image description here

1 个答案:

答案 0 :(得分:2)

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

C:\用户\戈德\桌面\ 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"

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

如果您将该文件从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()