首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于ADO的CommandTimeout求教-请求友谊支援

2014-07-11 
关于ADO的CommandTimeout求教----请求友情支援!本人目前正在开发一个服务器,需要执行客户提供的SQL语句(都

关于ADO的CommandTimeout求教----请求友情支援!
本人目前正在开发一个服务器,需要执行客户提供的SQL语句(都是SELECT语句)。程序采用VC6开发,ADO方式连接数据库,数据库是Oracle10 。因为客户数量不少,有并发执行的可能,因担心客户提供的SQL性能太差,执行时间过长而拖垮数据库,故本人想控制每条SQL执行的时间,超时的话将其强行断开。

开始我的想法是,通过ADO的CommandTimeout参数,来控制执行的时间,但经过实验发现该参数根本不起作用。

第一次实验的代码大概这样:
_ConnectionPtr conn;
_CommandPtr comm;

conn.CreateInstance(__uuidof(Connection));
conn->Connect(...); ///<省略 

comm.CreateInstance(__uuidof(Command));
comm->ActiveConnection = conn;
comm->CommandType = adCmdText;
comm->CommandText = _bstr_t(szSQL); ///<一段需要执行很长时间的SQL
comm->CommandTimeout = 3; ///< 三秒

_variant_t vtRecordsAffected;
_Recordset = comm->Execute(&vtRecordsAffected,NULL,adCmdText);


第二次实验的代码大概这样:
_ConnectionPtr conn;
_RecordsetPtr rs;

conn.CreateInstance(__uuidof(Connection));
conn->Connect(...); ///<省略 
conn->CommandTimeout = 3;

rs.CreateInstance(__uuidof(Recordset));
rs->Open(szSQL,_variant_t((IDispatch*)conn,true),adOpenStatic,adLockOptimistic,adCmdText);


这两种代码都未能成功。于是怀疑是驱动的问题,开始我是使用OraOLEDB.Oracle.1连接,后来改成微软自己的MSDAORA.1,重复以上两段代码,还是不能成功。

按常理说,数据库和OLEDB技术发展了这么多年,不可能没实现这个参数功能的,我想肯定是某个地方没弄好的缘故。因为项目比较吃紧,期望可以在这里得到帮助,请教各位了!!!

[解决办法]
悲剧,帮你顶顶~数据库的没太接触过~

[解决办法]
呵呵,多谢楼上的顶,发帖前我有心里准备的。这个问题我搜索过,基本都是问如何取消默认的超时限制,而没有像我一样反着来用的,即使有类似也是在其它的场景,比如java等等。
[解决办法]
人气有点冷清哦,路过的请帮顶一下哦,
[解决办法]
这个参数貌似似干这个的。
不过确实ADO中有很多麻烦,不少参数好像都不怎么好使。
[解决办法]
多谢楼上回复。

原因已查明,确实是Provider的问题,Oci本身不支持,神仙也没办法。期待OraOLEDB.Oracle.2吧,呵呵。

结贴。
[解决办法]
该回复于2010-10-20 10:21:57被版主删除
[解决办法]
现在遇到同样的问题,网上找了很久,问过过个开发群都没能解决。请指点一下。

热点排行