Reading attached files from database using OLE-DB

I’m trying to read a Microsoft Access Database using C#. I’m using the OLE-DB classes. The Problem is that this code

OleDbDataReader reader = Command.ExecuteReader(); 
while (reader.Read())
{
    Console.WriteLine(reader.GetFieldType(0) + "t" + reader.GetFieldType(1) + "t" + reader.GetFieldType(2) +
            "t" + reader.GetFieldType(3) + "t" + reader.GetFieldType(4) + "t" + reader.GetFieldType(5));
}

tells me, that the 5th field is from the datatype string. But it’s an attached file. When I’m trying to read this string, it is empty.

System.Int32    System.String   System.String   System.Int32    System.DateTime    System.String

Is there a way to read attached files from a database?

Answer

I realise you asked for OleDb, but with DAO you could say something like:

    DBEngine dbe = new DBEngine();
    Database db = dbe.OpenDatabase(@"z:docstest.accdb", false, false, "");
    Recordset rs = db.OpenRecordset("SELECT TheAttachment FROM TheTable", 
        RecordsetTypeEnum.dbOpenDynaset, 0, LockTypeEnum.dbOptimistic);

    Recordset2 rs2 = (Recordset2)rs.Fields["TheAttachment"].Value;

    Field2 f2 = (Field2)rs2.Fields["FileData"];
    f2.SaveToFile(@"z:docsForExample.xls");
    rs2.Close();
    rs.Close();

Reference: Programmatically managing Microsoft Access Attachment-typed field with .NET

Leave a Reply

Your email address will not be published. Required fields are marked *