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

时间:2016-05-11 03:16:01

标签: c# .net vb6 adodb recordset

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

但是我只能向该Recordset添加一行数据,如果我尝试添加额外的行,则最后一行实际上会返回到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添加多行吗?

1 个答案:

答案 0 :(得分:1)

多一点玩耍,我能够找到答案。您需要将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;