注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 [业内传闻]今天,7月25日..
 帮助

ADO:IDispatch error 3121错误的解决


2007-06-18 13:07:49
 标签:C++ ADO ADO   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://thomas.blog.51cto.com/177910/30587
在开发ADO应用中,老是碰到很多莫名奇妙的错误,Idispatch error 3121就是其中一个,也查过网上的解决办法,不太好用,所以写出来大家共享一下,这个错误是在执行一条SQL命令超时时报的错误,不是指链接超时,在Connection对象里有一个参数ConnectionTimeOut,它是指建数据库链接时的超时,如执行
m_pConnection->ConnectionTimeOut = 15
m_pConnection->Open(newVal,"","",adConnectUnspecified)
如果超过15秒,还没建立数据库链接,就会出错了。
也不是指连接空闲的时间,而是指执行SQL语句时的超时,它是通过CommandTimeout 属性来控制的,缺省是30秒。就是如果执行SQL语句超过30秒还没有取到结果就会出IDispatch error 3121错误。在网上见到有人把它这个参数设置成30000,其实不用那么麻烦,如果你不想它超时设为0就可以了,它永不超时。例子如下
 try
 {
  // Build DB Connection
  HRESULT hr = m_pConnection.CreateInstance(__uuidof(Connection));  
  if(FAILED(hr)) return S_FALSE;
  hr = m_pConnection->Open(newVal,"","",adConnectUnspecified);
  if(SUCCEEDED(hr))
  {
   m_pConnection->CommandTimeout = 0;
   m_pRs.CreateInstance(__uuidof(Recordset));
   return S_OK;
  }
  else return S_FALSE;  
 }
 catch(_com_error e) // Capture exceptions
 {
  GetErrorMsg(e.ErrorMessage());
  return S_FALSE;
 }
 

本文出自 “静侯佳音” 博客,请务必保留此出处http://thomas.blog.51cto.com/177910/30587





    文章评论
 
2007-06-18 22:02:18
原来还是这样的复杂,那么会不会暂停一小会之 类的现象呢?

2007-06-20 18:31:54
-1吧?

2007-06-22 08:40:13
should be 0, not -1

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: