SQL语句有时执行成功,有时失败(ADO连接sybase15)

miluzhe5848 2009-05-25 10:05:41
我需要做一个后台服务,每天定时对数据库中的大量数据进行统计分析,使用的是ADO连接sybase15.0.3.

现在的问题是在统计的时候不定时的出现SQL语句执行失败,返回的错误如下:

ADO Error: Error number: 0 Description: [08S01]
[: 30046]
[ASEOLEDB]到 Sybase 服务器的连接已丢失。 所有活动事务已被回退

本来以为是连接中断了,但是获取的连接状态是正常的open状态。
后来我不管连接是否正常,只要执行失败了就重连一次,然后再执行,这样修改之后好了点,有时重连一次就可以继续执行成功了,有时又不行,连续N次执行失败。

请问是什么原因?急盼各位前辈给予解答。。
项目因为我这一个问题延误三天了。。郁闷啊。。

PS:sybase使用的是开发版。
...全文
301 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
WWWWA 2009-05-27
  • 打赏
  • 举报
回复
呵呵中,自己解决更好,失败后重新建立一个新的连接才行,学习
miluzhe5848 2009-05-26
  • 打赏
  • 举报
回复
问题解决了,不过原因还是不清楚。。。

SQL语句执行失败之后,我使用的是ADO封装好的close和open函数进行重连,结果重连之后也10多次执行不成功,然后才正常。

现在换了一种方式,执行失败之后,直接把ADO对象析构掉,然后再重新new一个连接,这样重连之后就正常了。。。

不知道具体是为什么,还是期待大牛给解释一下。。。

难道是封装的ADO控件有毛病?
miluzhe5848 2009-05-25
  • 打赏
  • 举报
回复
执行错误的SQL语句有很多,第一次失败的一般是insert语句,例如:

INSERT INTO tmp_alarmlevelstat SELECT office_id,device_id,device_type,alm_level,'2009-05-18 23:00:00.000',COUNT(*) AS alarmcount,SUM(time_span) AS alarmtimespan FROM alarm_200905_2090 WHERE is_clear=1 AND (alm_time BETWEEN '2009-05-18 23:00:00.000' AND '2009-05-18 23:59:59.997') AND (clear_time BETWEEN '2009-05-18 23:00:00.000' AND '2009-05-18 23:59:59.997') GROUP BY device_id,office_id,device_type,alm_level UNION ALL SELECT office_id,device_id,device_type,alm_level,'2009-05-18 23:00:00.000',0 AS alarmcount,SUM(DATEDIFF(second,'2009-05-18 23:00:00.000',clear_time)) AS alarmtimespan FROM alarm_200905_2090 WHERE is_clear=1 AND (alm_time<'2009-05-18 23:00:00.000') AND (clear_time BETWEEN '2009-05-18 23:00:00.000' AND '2009-05-18 23:59:59.997') GROUP BY device_id,office_id,device_type,alm_level UNION ALL SELECT office_id,device_id,device_type,alm_level,'2009-05-18 23:00:00.000',COUNT(*) AS alarmcount,SUM(DATEDIFF(second,alm_time,'2009-05-18 23:59:59.997')) AS alarmtimespan FROM alarm_200905_2090 WHERE (is_clear=0 AND (alm_time BETWEEN '2009-05-18 23:00:00.000' AND '2009-05-18 23:59:59.997')) OR (is_clear=1 AND (alm_time BETWEEN '2009-05-18 23:00:00.000' AND '2009-05-18 23:59:59.997') AND (clear_time > '2009-05-18 23:59:59.997')) GROUP BY device_id,office_id,device_type,alm_level UNION ALL SELECT office_id,device_id,device_type,alm_level,'2009-05-18 23:00:00.000',0 AS alarmcount,SUM(3600) AS alarmtimespan FROM alarm_200905_2090 WHERE (is_clear=0 AND (alm_time<'2009-05-18 23:00:00.000')) OR (is_clear=1 AND (alm_time < '2009-05-18 23:00:00.000') AND (clear_time > '2009-05-18 23:59:59.997')) GROUP BY device_id,office_id,device_type,alm_level


失败之后,我就进行重连,但是继续失败,接着的select和trancate也失败,失败个10多次之后才能继续工作。。

如果是执行超时的话,提示应该不是这样的吧
miluzhe5848 2009-05-25
  • 打赏
  • 举报
回复
补充一下,我把统计过程输入到日志中,发现:
SQL语句执行失败的行数:
第一次:第20716行
第二次:第41496行
第三次:第62293行
第四次:第83154行
第五次:第104011行
。。。。。。。。

非常标准的整倍数,中间大约执行39744次SQL语句。

期待大牛给予帮助。
ACMAIN_CHM 2009-05-25
  • 打赏
  • 举报
回复

执行的SQL语句是什么?是不是超时了?
Jessie_Zhang 2009-05-25
  • 打赏
  • 举报
回复
啊?不清楚,友情帮你顶...

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧