VC编程的程序,每1小时往sql2005中存储数据(300条左右),运行一段时间后偶尔出现“超时已过期”错误,该条数据存储失败,哪位帮忙分析下原因

解决方案 »

  1.   

    把timeout设置时间再长一些
      

  2.   

    ConnectionTimeout没有进行设置,应该是取默认值900秒吧
    PS:在程序启动时建立与数据库的连接(程序运行中不会关闭或重新建立连接),此后由定时器每1小时存储一次数据,这个是不是会导致此问题。
      

  3.   

    好像没什么问题,我的数据量其实并不大(开定时器每小时存储300条数据)
    是要设置哪里的timeout呢?m_pCommand->CommandTimeout=0?
      

  4.   

    CommandTimeout=0 这个应该是无限大了吧 
      

  5.   

    如果都设为无限大是不是不会产生这个问题?设为无限大,那只能靠SQL Server本身自带的功能来避免过长等待了。建议设小一点,不够再调大,同时sql代码中,如果用到事务,显式开始及显式提交或回滚。同时可以根据业务需要考虑是否设置下图中的选项:
      

  6.   

    如果都设为无限大是不是不会产生这个问题?设为无限大,那只能靠SQL Server本身自带的功能来避免过长等待了。建议设小一点,不够再调大,同时sql代码中,如果用到事务,显式开始及显式提交或回滚。同时可以根据业务需要考虑是否设置下图中的选项:

    通过观察活动监视器,程序对数据库有如下活动:
    根据上图好像没有造成阻塞吧。如果出现阻塞应该怎么处理呢?
    PS:数据库中对表建立了触发器,会对插入的数据进行处理。
      

  7.   

    周期性执行:
    select * from sys.sysprocesses where blocked<>0
    如果有数据,那用DBCC INPUTBUFFER(SPID)这个SPID是上面语句中第一列
    看看执行了什么,然后看看是否执行过久或者有阻塞,还可以用DBCC OPENTRAN来看看有没有打开了的事务,如果有,且已经保持了很久,有可能就是未提交,阻塞了其他事务等等
      

  8.   

    你那个e.Description() 就就只显示“超时已过期” ,没有更多的信息吗?