我在Access数据库中的附件数据类型中存储了多个文档。使用DataReader,我需要读取多个附件及其文件名,并将它们存储在文件系统中。非常感谢你的帮助...
答案 0 :(得分:3)
我遇到了类似的问题,这是我如何使用DAO解决它。
var dbe = new DBEngine();
Database db = dbe.OpenDatabase(@"C:\tmp\access database file.accdb");
try
{
Recordset rstMain = db.OpenRecordset(
"SELECT `Attachment` FROM `table name`",
RecordsetTypeEnum.dbOpenDynaset);
while (!rstMain.EOF)
{
Recordset2 rstAttach = rstMain.Fields["Attachment"].Value;
rstAttach.OpenRecordset();
while (!rstAttach.EOF)
{
Field2 fldAttach = (Field2)rstAttach.Fields["FileData"];
string fileName = rstAttach.Fields["FileName"].Value.ToString();
fldAttach.SaveToFile(@"C:\tmp\" + fileName);
rstAttach.MoveNext();
}
rstAttach.Close();
rstMain.MoveNext();
}
rstMain.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
您应在标题中加入using Microsoft.Office.Interop.Access.Dao;
。
答案 1 :(得分:2)
您通过ADO.NET获得的唯一数据是附加文件名称的分号分隔列表。此外,您将看到ADO.NET将该列类型识别为 String 。因此,您无法从列中获取实际的二进制数据(在.NET端)。
如果您需要从Access数据库之外的该列访问数据,我建议您不要在Access中使用 Attachment 作为数据类型。只需创建单独的表来存储所有附件[链接]。