Search code examples
activexadodb

ADODBCould not load type 'ADODB.FieldsToInternalFieldsMarshaler' from assembly


I'm trying to read an ADOBD.Recordset object like this (my first time, so pardon my "noobness" :D):

Presentation.Category categorySvc = new Presentation.Category();
ADODB.Recordset categories = categorySvc.ListAll("BE", "DUE", "EN", 128);
foreach (var category in categories.Fields) // here is where I get the exception
{
   // ...
}

The ListAll call works fine - I get the Recordset with some data which I confirm that by doing a QuickWatch on the object. But when the code reach the categories.Fields I get the following exception:

Could not load type 'ADODB.FieldsToInternalFieldsMarshaler' from assembly 'TestCOMCalls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

I googled this error (or just by 'ADODB.FieldsToInternalFieldsMarshaler' and couldn't find anything that would help me with issue).

I wonder, am I missing a reference? Besides the normal references I have added this one to my project:

ADODB Microsoft ActiveX Data Objects 2.5 Library C:\WINDOWS\assembly\GAC\ADODB\7.0.3300.0__b03f5f7f11d50a3a\ADODB.dll

Like I said, I've never done this before but by googling a bit I was able to see some people doing this (foreach on the object.Fields) and it seem to work for them.

Any help or direction is greatly appreciated :)

Thanks!


Solution

  • Okay, I figured how to do this:

    Presentation.Category categorySvc = new Presentation.Category();
    ADODB.Recordset categories = categorySvc.ListAll("BE", "DUE", "EN", 128);
    categories.MoveFirst();
    while(!categories.EOF)
    {
        var fields = ((dynamic)categories).Fields;
        for (int i = 0; i < fields.Count; i++)
        {
            var field = fields[i];
            var name = field.Name;
            var value = field.Value;
            // ...
        }
        categories.MoveNext();
    }