如何将多行添加到 C#.Net 中手动创建的 ADODB.Recordset

How do you add multiple rows to a manually created ADODB.Recordset in C#.Net

我正在尝试创建一个新的 C#.Net COM+ 应用程序来与旧版 VB6 应用程序进行通信。到目前为止,我已经完成了所有工作,我可以 return 各种对象,包括 ADODB.Recordset.

但是我只能向该 Recordset 添加一行数据,如果我尝试添加额外的行,实际上只有最后一行 returned 到 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 行数据,即 "Jane"

有人可以向我解释如何在 C# 中向 ADODB.Recordset 添加多行吗?

多玩了一会儿,我找到了答案。您需要将 Recordsets 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;