基于Tuxedo的PRO*C开发问题,高手请入
#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);}