2016-05-11 9 views
1

Я пытаюсь создать новое приложение C# .Net COM + для связи с устаревшими приложениями VB6. Пока у меня все работает, я могу вернуть всевозможные объекты, включая ADODB.Recordset.Как добавить несколько строк в созданный вручную ADODB.Recordset в C# .Net

Однако я могу добавить только одну строку данных в этот набор записей, и если я попытаюсь добавить дополнительные строки, последняя строка фактически будет возвращена в приложение VB6.

// List of data 
List<string> names = new List<string> { "Fred", "John", "Jane" }; 

// Create ADODB Recordset 
var adors = new ADODB.Recordset(); 
adors.Fields.Append("name", ADODB.DataTypeEnum.adLongVarChar, 250, FieldAttributeEnum.adFldIsNullable); 
adors.Open(System.Reflection.Missing.Value, System.Reflection.Missing.Value, CursorTypeEnum.adOpenDynamic, LockTypeEnum.adLockOptimistic, -1); 

// Loop through data and add a row for each one 
foreach (var name in names) 
{ 
    adors.AddNew(); 
    adors.Fields["name"].Value = name; 
    adors.Update(System.Reflection.Missing.Value, System.Reflection.Missing.Value); 
} 

// Return Recordset 
return adors; 

Для приведенного выше примера VB6 получит Recordset назад с 1 строкой данных, которая была бы «Джейн»

Может кто-то пожалуйста, объясните мне, как добавить несколько строк к ADODB.Recordset в C#?

+0

adors.Fields [ "имя"] Value = membership.MemberNumber. Вы уверены, что это утверждение верно? Фактически вы не назначаете имя набору записей ADODB. – Thangadurai

+0

@Thangadurai no это было неправильно. Посмотрите мое последнее обновление. Это был некоторый реальный код, попадающий в пример. Я также нашел ответ на мой вопрос, который я добавил. –

ответ

1

Немного поиграть, и я смог найти ответ. Вы должны установить на AbsolutePosition набора записей 1.

// Set recordset back to starting position 
adors.AbsolutePosition = (PositionEnum)1; 

Полный пример ниже

// List of data 
List<string> names = new List<string> { "Fred", "John", "Jane" }; 

// Create ADODB Recordset 
var adors = new ADODB.Recordset(); 
adors.Fields.Append("name", ADODB.DataTypeEnum.adLongVarChar, 250, FieldAttributeEnum.adFldIsNullable); 
adors.Open(System.Reflection.Missing.Value, System.Reflection.Missing.Value, CursorTypeEnum.adOpenDynamic, LockTypeEnum.adLockOptimistic, -1); 

// Loop through data and add a row for each one 
foreach (var name in names) 
{ 
    adors.AddNew(); 
    adors.Fields["name"].Value = name; 
    adors.Update(System.Reflection.Missing.Value, System.Reflection.Missing.Value); 
} 

// Set recordset back to starting position 
adors.AbsolutePosition = (PositionEnum)1; 

// Return Recordset 
return adors;