我正在尝试创建一个新的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添加多行吗?
答案 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;