Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ C++/CLI托管包装器和ADODB::记录集 我有一个使用COM ADO记录集的原生C++ DLL,需要将它转换成.NET变体(ADODB::记录集)。我尝试了几种方法来解决这个问题,但都没有成功。 本机C++ DLL动态创建并填充COM记录集。理想情况下,我会对托管包装器中的ADODB::Recordset执行相同的操作,但我无法访问所需的属性。 例如,当试图利用Fields集合来追加列时(尽管intellisense告诉我不是这样),我收到:_Visual C++_Ado.net_C++ Cli - Fatal编程技术网

Visual c++ C++/CLI托管包装器和ADODB::记录集 我有一个使用COM ADO记录集的原生C++ DLL,需要将它转换成.NET变体(ADODB::记录集)。我尝试了几种方法来解决这个问题,但都没有成功。 本机C++ DLL动态创建并填充COM记录集。理想情况下,我会对托管包装器中的ADODB::Recordset执行相同的操作,但我无法访问所需的属性。 例如,当试图利用Fields集合来追加列时(尽管intellisense告诉我不是这样),我收到:

Visual c++ C++/CLI托管包装器和ADODB::记录集 我有一个使用COM ADO记录集的原生C++ DLL,需要将它转换成.NET变体(ADODB::记录集)。我尝试了几种方法来解决这个问题,但都没有成功。 本机C++ DLL动态创建并填充COM记录集。理想情况下,我会对托管包装器中的ADODB::Recordset执行相同的操作,但我无法访问所需的属性。 例如,当试图利用Fields集合来追加列时(尽管intellisense告诉我不是这样),我收到:,visual-c++,ado.net,c++-cli,Visual C++,Ado.net,C++ Cli,错误C2039:“字段”:不是“ADODB::记录集”的成员 ADODB::Recordset ^RS = gcnew ADODB::Recordset (); RS->Fields->Append("ID", DataTypeEnum::adInteger, 1, FieldAttributeEnum::adFldKeyColumn); 我的C++/CLI解决方案包含ADODB参考(C:\Program Files\Microsoft.NET\Primary Interop As

错误C2039:“字段”:不是“ADODB::记录集”的成员

ADODB::Recordset ^RS = gcnew ADODB::Recordset ();
RS->Fields->Append("ID", DataTypeEnum::adInteger, 1, FieldAttributeEnum::adFldKeyColumn);
我的C++/CLI解决方案包含ADODB参考(C:\Program Files\Microsoft.NET\Primary Interop Assembly\ADODB.dll)版本7.0.3300.0 我正在使用Visual Studio 2005和.NET Framework 2.0.50727 SP2


如果StackOverflow社区中有人能告诉我一个使用C++/CLI动态填充.NET ADO记录集的示例,我会很感激的。

我认为原始COM记录集和.NET包装类提供的记录集之间的主要区别只是有些东西被重命名了。它只是底层COM对象的包装器,本身并不是一个新类

要回答您的直接示例,请尝试

RS->default->Append(...);
您可以尝试在adodb.dll上运行ILDASM,您必须查看recordset类上的API是什么

您也可以执行以下操作:

//Create instance of a recordset
ADODB::RecordsetClass^ recordset;
recordset = gcnew ADODB::RecordsetClass();

//Set some options
recordset->CursorLocation = ADODB::CursorLocationEnum::adUseClient ;
recordset->CursorType = ADODB::CursorTypeEnum::adOpenDynamic;
recordset->LockType = ADODB::LockTypeEnum::adLockBatchOptimistic;

//Add columns
recordset->default->Append("Name", ADODB::DataTypeEnum::adWChar, 50, ADODB::FieldAttributeEnum::adFldFixed, nullptr);
recordset->default->Append("Number", ADODB::DataTypeEnum::adWChar, 20, ADODB::FieldAttributeEnum::adFldFixed, nullptr);

//Build an array of field names
fields = gcnew array<Object^>(2);
fields[0] = gcnew String("Name");
fields[1] = gcnew String("Number");

//Add values
array<Object^>^ values = gcnew array<Object^>(2);
values [0] = "some name";
values [1] = 1.2;
recordset->AddNew(fields, values);

//Get a value out again
recordset->MoveFirst();
ADODB::Field^ pNum= recordset->default[1];
double num = Convert::ToDouble((pNum->default));
//创建记录集的实例
ADODB::RecordsetClass^记录集;
recordset=gcnew ADODB::RecordsetClass();
//设置一些选项
recordset->CursorLocation=ADODB::CursorLocationEnum::AdusClient;
recordset->CursorType=ADODB::CursorTypeEnum::ADOPendDynamic;
recordset->LockType=ADODB::LockTypeEnum::ADLockBatchOptimization;
//添加列
记录集->默认->附加(“名称”,ADODB::DataTypeEnum::adWChar,50,ADODB::FieldAttributeEnum::adFldFixed,nullptr);
记录集->默认->附加(“数字”,ADODB::DataTypeEnum::adWChar,20,ADODB::FieldAttributeEnum::adFldFixed,nullptr);
//构建一个字段名数组
字段=新数组(2);
字段[0]=gcnew字符串(“名称”);
字段[1]=新字符串(“数字”);
//增加价值
数组^values=gcnew数组(2);
值[0]=“某个名称”;
数值[1]=1.2;
记录集->新增(字段、值);
//再次获取值
记录集->移动优先();
ADODB::Field ^pNum=recordset->default[1];
double num=Convert::ToDouble((pNum->default));