ado _RecordsetPtr open 最可能的异常: Microsoft C++ exception


代码:

_RecordsetPtr m_pRecordset;
    m_pRecordset.CreateInstance(__uuidof(Recordset));
    m_pRecordset->CursorLocation = adUseClient;
    m_pRecordset->Open(_bstr_t("select count(*) from v$parameter"),_variant_t((IDispatch *)m_pConnection,true),adOpenStatic, adLockOptimistic, adCmdUnknown);
    m_pRecordset->Close();
    m_pRecordset->Open(_bstr_t("select  value from v$parameter where name like 'proc%'"),_variant_t((IDispatch *)m_pConnection,true),adOpenStatic, adLockOptimistic, adCmdUnknown);
    m_pRecordset->Close();
    m_pRecordset->Open(_bstr_t("select count(*) from v$parameter"),_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockReadOnly,adCmdUnknown);
    m_pRecordset->Close();

 

连接数据库之后,执行红色部分,然后监视窗口报

CCardDlg.exe 中的 0x7c812afb 处最可能的异常: Microsoft C++ exception: long @ 0x0012dfdc 。

虽然查询结构正确,但是感觉不爽

然后baidu,google,看到这么一句话

不让你直接获得count的原因是那代价高昂
所以不要指望既可以插入又可以获得count了

然后试着把adLockOptimistic改成adLockReadOnly,发现监视没有上面那句话了,

 

参考1:

.LockType
LockType   属性
指示编辑过程中对记录使用的锁定类型。

设置和返回值

设置或返回以下某个   LockTypeEnum   的值。

常量   说明  
adLockReadOnly   默认值,只读。无法更改数据。  
adLockPessimistic   保守式记录锁定(逐条)。提供者执行必要的操作确保成功编辑记录,通常采用编辑时立即锁定数据源的记录的方式。  
adLockOptimistic   开放式记录锁定(逐条)。提供者使用开放式锁定,只在调用   Update   方法时锁定记录。  
adLockBatchOptimistic   开放式批更新。用于与立即更新模式相反的批更新模式。  

.CursorLocation  
CursorLocation   属性
设置或返回游标服务的位置。

设置和返回值

设置或返回可设置为以下某个常量的长整型值。

常量   说明  
adUseNone   没有使用游标服务。(该常量已过时并且只为了向后兼容才出现)。  
adUseClient   使用由本地游标库提供的客户端游标。本地游标服务通常允许使用的许多功能可能是驱动程序提供的游标无法使用的,因此使用该设置对于那些将要启用的功能是有好处的。AdUseClient   具有向后兼容性,也支持同义的   adUseClientBatch。  
adUseServer   默认值。使用数据提供者的或驱动程序提供的游标。这些游标有时非常灵活,对于其他用户对数据源所作的更改具有额外的敏感性。但是,Microsoft   Client   Cursor   Provider(如已断开关联的记录集)的某些功能无法由服务器端游标模拟,通过该设置将无法使用这些功能。  

 

参考2:

http://topic.csdn.net/u/20090719/11/d79cfe87-06a7-41e3-b74f-0f9d9689b41f.html

http://topic.csdn.net/t/20041024/16/3486160.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值