单独执行一个存储过程正常,但是在循环执行多个时出现IDispatch error #3121错误?

tristsesame 杭州快睿 开发组长/高级工程师/技术专家  2003-11-25 04:14:14
我在VC里使用ADO来调用存储过程.
大概有十多个,
我使用了个for循环来一个个execute

但其中有一个总是出现IDispatch error #3121错误
上google查了查,除了找到这个
IDispatch error #3121 - [Microsoft OLE DB Provider for
SQL Server] Timeout expired
好像也没找到别的什么.

但是如果我在程序里只调用这一个存储过程时,却能成功.

或者是我在查询分析器里调用时,也能成功。

不明白什么原因。
大家帮帮忙,帮俺看看
...全文
146 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhongjy001 2003-11-26
干脆再写一个存储过程 用来循环调用这些存储过程吧
就不用在程序里面循环调用了 也不容易出错
回复
tristsesame 2003-11-26
to zjcxc
呵,刚看了你的贴子,学到了不少。
多谢了。

不过不适用于我这次所要做的数据的升级

因为表名,表结构,表的列名都改了,
有的表多了几项,有的表少了几项
还有的老的数据日期是字符型的等等。

所以我是对每个表都写了一个存储过程来实现的。
回复
zjcxc 2003-11-26
建议参考:

数据迁移
http://expert.csdn.net/Expert/topic/2403/2403537.xml?temp=.1308863
回复
zjcxc 2003-11-26
数据升级?
回复
tristsesame 2003-11-26
to w_rose

我是在做数据库数据的转换。
是整个系统升级,
在做这升级时,数据库应该停止其它的工作。

不知你有什么好的建议。
怎么才能保护系统的运行状态
还有什么才是好的设计呢。
为什么说是“轻率”呢?
欢迎指点一二
回复
w_rose 2003-11-26
竟然有“insert table1 select table2”这样的代码?技术上的“轻率病”,不知道好好保护一下系统的运行状态。好的设计,在数据有1万条与1000万条时都能稳定地运行。
回复
tristsesame 2003-11-25
刚才设置了一下
commandTimeOut=0

再把那个存储过程放到循环中间来执行。

可以正常运行了。

虽然是超时的问题,
但是放在把这存储过程放在最后一个,
或者程序里只运行这么一个存储过程,
都能成功。

觉得有些奇怪,
回复
tristsesame 2003-11-25
发觉挺奇怪的.

我把那个存储过程放在循环的最后一个来运行,
倒是可以运行成功。

那是一个insert table1 select table2
的存储过程.
大概五万多条吧,不到一分钟.

如果是超时的问题,为什么放在最后运行,就可以成功了.

有点困惑。
回复
txlicenhe 2003-11-25

超时:
1:企业管理器->服务器->属性->连接->查询超时(改为0或一个较大的数)
2:ADO的连接超时属性connectiontimeout 设大点.
3:ADO的CommandTimeout设大点
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2003-11-25 04:14
社区公告
暂无公告