需要C#代码才能使用DataReader从Microsoft Access Attachment数据类型中读取多个附件

时间:2011-08-01 07:46:27

标签: c# .net vb.net ms-access ado.net

我在Access数据库中的附件数据类型中存储了多个文档。使用DataReader,我需要读取多个附件及其文件名,并将它们存储在文件系统中。非常感谢你的帮助...

2 个答案:

答案 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 作为数据类型。只需创建单独的表来存储所有附件[链接]。