读书人

基于Tuxedo的PRO*C开发有关问题高手

发布时间: 2012-02-19 19:43:39 作者: rapoo

基于Tuxedo的PRO*C开发问题,高手请入

C/C++ code
#ifndef _login_proc_pc_#define _login_proc_pc_#include <iostream>#include <string>#include <sqlca.h>#include <atmi.h>#include <userlog.h>#include "include/PacketInterface.h"#include "xmlhelper.h"using namespace std;#endifEXEC SQL INCLUDE sqlca;EXEC SQL BEGIN DECLARE SECTION;        struct DBMSG        {                const char* dbstr;                const char* dbuser;                const char* dbpwd;        }dbmsg;        char *sqltext=NULL;        char *username=NULL;    char *userpwd=NULL;    char *ipaddr=NULL;    int iLanguage;        int datacount=0;EXEC SQL END DECLARE SECTION;void readdbmsg();int #if defined(__STDC__) || defined(__cplusplus)tpsvrinit(int argc,char* argv[])#elsetpsvrinit(argc,argv)int argc;char** argv;#endif{    argc=argc;    argv=argv;    readdbmsg();        EXEC SQL WHENEVER SQLERROR DO sqlerror(sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);/*connect database*/        EXEC SQL CONNECT :dbmsg.dbuser IDENTIFIED BY :dbmsg.dbpwd USING :dbmsg.dbstr;    if(sqlca.sqlcode==0)    {        userlog("connect database succness!");    }    else    {        userlog("connect database faid,code is %d",sqlca.sqlcode);    }    userlog("this application for testing proc login.");    return 0;}/*error processing*/void sqlerror(int sqlcode,char * errmsg){    /*destroy username,userpwd,ipaddr*/    if(username!=NULL)        delete username;    if(userpwd!=NULL)        delete userpwd;    if(ipaddr!=NULL)        delete ipaddr;    cout<<"occur a error,sqlcode is "<<sqlcode<<",sql error message is:"<<errmsg<<endl;    EXEC SQL ROLLBACK WORK RELEASE;}void#if defined(__STDC__) || defined(__cplusplus)tpsvrdone(int argc,char* argv[])#elsetpsvrdone(argc,argv)int argc;char** argv;#endif{    //EXEC SQL WHENEVER SQLERROR DO sqlerror(sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);    EXEC SQL WHENEVER SQLERROR CONTINUE;    EXEC SQL COMMIT WORK RELEASE;}void readdbmsg(){        xmlhelper helper("./database.xml");        ptree pt=helper.getnodechild("Config.DataSources.DataSource");        dbmsg.dbuser=helper.getnodevalue(pt,"UserName").c_str();        dbmsg.dbpwd =helper.getnodevalue(pt,"Password").c_str();        dbmsg.dbstr =helper.getnodevalue(pt,"Instance").c_str();       /*        dbmsg.dbuser="amsdbo";        dbmsg.dbpwd="181818";        dbmsg.dbstr="BOBUI";        */}#ifdef __cplusplusextern "C"#endifvoid#if defined(__STDC__) || defined(__cplusplus)Login(TPSVCINFO* info)#elseLogin(info)TPSVCINFO *info;#endif{    /*get input values*/        int ID=Yss_Parse(info->data);    int usernamelen=Yss_GetValueLength(ID,"username")+1;    username=new char[usernamelen];        memset(username,0,usernamelen);    Yss_GetValue(ID,"username",username);        int userpwdlen=Yss_GetValueLength(ID,"userpwd")+1;    userpwd=new char[userpwdlen];    memset(userpwd,0,userpwdlen);    Yss_GetValue(ID,"userpwd",userpwd);        int ipaddrlen=Yss_GetValueLength(ID,"ipaddr")+1;    ipaddr=new char[ipaddrlen];    memset(ipaddr,0,ipaddrlen);    Yss_GetValue(ID,"ipaddr",ipaddr);            int ilanguagelen=Yss_GetValueLength(ID,"ilanguage")+1;    char* language=new char[ilanguagelen];    memset(language,0,ilanguagelen);    Yss_GetValue(ID,"ilanguage",language);    iLanguage=atoi(language);    delete language;    /*login business*/        if(username=="WZRiskSrv" && userpwd=="WZRiskSrv")    {                info->data="this user is 默认用户1";    }    else if(username=="Test" && userpwd=="Test")    {                info->data="this user is 默认用户2";    }    else    {               //string sqltextstr="select 1 from users where vc_usr='"+username+"' and (v_user_password='"+userpwd+"' or Password ='"+userpwd+"') and i_checkstate=1";               sprintf(sqltext,"select 1 from users where vc_usr='%s' and (v_user_password='%s' or Password ='%s') and i_checkstate=1",username,userpwd,userpwd) ;               //sqltext=sqltextstr.c_str();                //const char * csqltext=sqltext.c_str();                EXEC SQL PREPARE s FROM :sqltext;        EXEC SQL DECLARE cur_user CURSOR FOR s;                EXEC SQL OPEN cur_user;// USING :username,:userpwd,:userpwd;                while(true)        {            EXEC SQL FETCH cur_user into:datacount;            if(sqlca.sqlcode<0)            {                                info->data="some error occur.";                break;            }            if(sqlca.sqlcode==SQLNOTFOUND)            {                break;            }            if(datacount>0)            {                                info->data="this user is exist.";                break;            }            else            {                                info->data="this user is not exist";                break;            }        }        EXEC SQL CLOSE cur_user;        /*EXECUTE LOGIN SQL*//*        EXEC SQL SELECT 1 INTO :datacount FROM users WHERE vc_usr=:username AND (v_user_password=:userpwd OR Password=:userpwd) AND i_checkstat=1;        if(datacount>0)            {            char * result="this user is exist.";            rqst->data=result;        }        else        {            char * result="this user is not exist.";            rqst->data=result;                }    } */        tpreturn(TPSUCCESS,0,info->data,0L,0);} 




请注意
#include "include/PacketInterface.h"
#include "xmlhelper.h"
这两个外部库不存在什么问题,已经在其他项目中成功使用。



[解决办法]
这个专业了。又是oracle,又是tuxedo的。

报的错误是针对login.cc的,所以我觉得lz应该贴那个文件的内容。

另外代码太长了,能不能缩减到只留下有问题的部分?

读书人网 >C++

热点推荐