免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1980 | 回复: 2
打印 上一主题 下一主题

如何判断一个DBPROCESS 仍然可用?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-02-13 17:04 |只看该作者 |倒序浏览
先把代码列出来
....
    DBPROCESS * proc;
....
int sqlcmd(char *cmd)
{
  if(!proc)return 2;

  printf("dbcanquery %d\n",dbcanquery(proc));

  dbcmd(proc,cmd);
  dbsqlexec(proc);//关键点

  if (dbresults(proc)!=SUCCEED){
    dbcmd(proc,"rollback";
    dbsqlexec(proc);
    dbresults(proc);
    return 1;
  }
  return 0;
}

这里的proc是联到一台win2K机器上的SQL server上的,在我标注出的"关键点"处,可能会出现一些问题,让我比较疑惑。详细如下

正常情况下,sqlcmd执行是正常的,但在实际中有这样的情况:程序启动后proc就联接成功了,但在关键点一句之前,由于某种原因,网络出现的问题,这时的proc没有正常关闭,似乎系统认为proc仍然可用,dbcanquery返回的也是SUCCEED/1,但这时执行dbsqlexec时就会出错(肯定的了,网络都断了啊),程序的错误处理是

int CS_PUBLIC dberr_handler(DBPROCESS *dbproc,int serity,int dberr,int oserr,char *dberrstr,char *oserrstr)
{
  if(dbproc==NULL){
    lprintf("DB-Library error:dbproc is NULL!\n";
    return(INT_EXIT);
  }
  else if(DBDEAD(dbproc)){
    lprintf("DB-Library error:dbproc is dead!\n";
    return(INT_EXIT);
  }  
  else{
    //lprintf("DB-Library error:%s\n",dberrstr);
    if(oserr!=DBNOERR)lprintf("Operating system error:%s\n",oserrstr);
    return(INT_CANCEL);
  }
}
这样程序就会退出了,我的目的是不要让程序退出,用某种办法来测试一下proc是不是好的,如果已经坏了就不再执行dbsqlexec了,清理一下现场,接着执行其它的,或者重新试图联接一下,生成一个新的proc。总之不要让程序退出就行了。
当然目的是不要让程序退出,有其它方法也可以,我对sybase很不了解,上面的代码也是抄来的,所以看不大明白,问题也不太会提,请方家指点一二,如有阐述不清之处,也请指出,我来现作说明。

多谢多谢,有劳

论坛徽章:
0
2 [报告]
发表于 2004-02-17 09:50 |只看该作者

如何判断一个DBPROCESS 仍然可用??

不好意思,自己顶一下,提前提前

论坛徽章:
0
3 [报告]
发表于 2004-02-17 13:16 |只看该作者

如何判断一个DBPROCESS 仍然可用??

进程如果被数据库检查到网络异常的话就会kill的,process id需要重新连接并赋予新的号码!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP