关于_RecordsetPtr的问题

FrankSun80 2012-08-16 07:03:22
我想用_RecordsetPtr对象向表中插入数条记录,但我不想打开一个记录集对象(为效率考虑),有什么解决方案?举例说明,
有数据库表:
create table student (sno number(10),sname varchar2(20))
准备用如下代码插入一条记录:

_RecordsetPtr spRecordset;
if (FAILED(spRecordset.CreateInstance(__uuidof(Recordset))))
{
MessageBox(NULL, _T("Error"), _T("Error"), MB_OK || MB_ICONWARNING);
return 1;
}

//Open the spRecordset;如果不用Open,还有别的替代解决方案吗?
spRecordsetOriginal->Open(_variant_t(_T("select * from student where 0>1")), _variant_t((IDispatch*)pMyConnect, true), adOpenKeyset, adLockBatchOptimistic, adCmdText);

HRESULT hr = spRecordset->AddNew();
assert(SUCCEEDED(hr));

spRecordset->Fields->GetItem(vtIndex0)->Value = _bstr_t("002");
spRecordset->Fields->GetItem(vtIndex1)->Value = _bstr_t("ADO-002");
hr = spRecordset->UpdateBatch(adAffectAll);
assert(SUCCEEDED(hr));





...全文
138 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
FrankSun80 2012-08-17
  • 打赏
  • 举报
回复
2楼,谢谢您的回答,这确实是一个好的替代方案!但如果我坚持用_RecordsetPtr对象呢?因为有时候构造SQL语句,没有绑定变量来得方便。
FrankSun80 2012-08-17
  • 打赏
  • 举报
回复
是的你说得很对,这只是一个Demo代码,实际中的代码我会用到CFMADORecordBinding将所有的列绑定到C++的类中,而不是直接给每一列赋值,当然,我觉得这样的效率肯定没有直接构造SQL语句来得更高效!但要手动把200多张表都改成Insert语句去增加记录,我还得好好考虑下:)

[Quote=引用 3 楼 的回复:]

你代码里并没绑定变量,就是字段和变量绑定,仍然是把变量的值赋给对应的字段,这样和构造SQL语句基本是一样的,而且用SQL语句只需要一条语句,剩下的是后台执行具体的插入过程.
你的代码里得这么操作:
AddNew();//开始增加
赋值
UpDate();//更新到数据库的表里,没有这句就相当于没真正插入到数据库里.
所以这不如用SQL语句简单.
[/Quote]
hdg3707 2012-08-17
  • 打赏
  • 举报
回复
你代码里并没绑定变量,就是字段和变量绑定,仍然是把变量的值赋给对应的字段,这样和构造SQL语句基本是一样的,而且用SQL语句只需要一条语句,剩下的是后台执行具体的插入过程.
你的代码里得这么操作:
AddNew();//开始增加
赋值
UpDate();//更新到数据库的表里,没有这句就相当于没真正插入到数据库里.
所以这不如用SQL语句简单.
hdg3707 2012-08-16
  • 打赏
  • 举报
回复
_ConnectionPtr pcon;
pcon->Execute("insert into .....");

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧