views:

133

answers:

1

I am attempting to generate an ADO RecordSet programatically within .Net. This will be passed on to existing legacy code in VB6 which is already expecting a ADO RecordSet, I do not wish to change the existing code.

I was successful in defining fields within a new RecordSet

ADODB.Recordset rs = new Recordset();
            rs.Fields.Append("Height", DataTypeEnum.adInteger, 4, FieldAttributeEnum.adFldMayBeNull, null);

within VB6 I can add records after calling Open on the RecordSet with no parameters:

rs.Open

when I try to call AddNew with in .net code it tells me the recordset must be open, and I can't call open because it is expecting the following parameters:

void Open(object Source, object ActiveConnection, CursorTypeEnum CursorType, LockTypeEnum LockType, int Options);

but I am attempting to load the RecordSet programatically and do not have any active connection or other datasource.

What am I missing? Is there a better way?

+1  A: 

Those parameters are all optional in the ADODB.Recordset.Open method. Try explicitly passing the default values as specified in the documentation. There is one parameter, Source, with no explicit default listed. I imagine the default is Nothing. EDIT I guessed wrong, apparently it is System.Type.Missing

So the solution is:

rs.Open (System.Type.Missing, System.Type.Missing, _
  adOpenUnspecified, adLockUnspecified, -1)
MarkJ
Close...replace Nothing, or null with System.Type.Missing and it works beautifully. Thanks
benPearce
@benPearce I edited my answer, is that now correct? (For anyone who stumbles across this in future)
MarkJ