我有一个MS Access MDB,它有一个来自.csv的链接表。我必须更改路径,所以我必须使用链接表管理器来更新csv的路径。
有没有办法以编程方式使用C#?
我尝试使用此链接中的帮助,但它是关于Sql和MsAccess的。 enter link description here
提前谢谢。
答案 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()