我在更新表的时候,有的属性我不需要更新.我现在只想更新有变化的属性,但是可能这次操作这个属性修改了,另外一个操作这个属性没有被修改.我想把这些统一到一个update函数里面去.更新就只更新那些数据发生变化的.有没有什么好的方法?
原来的数据库更新函数是这么写的:
/*按照操作员登录号更新操作员信息*/
int COperator_UpdatePropsByLoginID(char *OLoginId,OperatorProps *op)
{
EXEC sql begin declare section;
char wOperLoginId[LOGINIDLENGTH+1]={0};
char wSysID[3] ={0};
char wOseq[OSEQLENGTH+1]={0};
char wOperId[OPERIDLENGTH+1]={0};
char wSerialNo[SERIALNOLENGTH+1]={0};
char wOperName[OPERNAMELENGTH+1]={0};
char wOperIDCard[OPERIDCARDLENGTH+1]={0};
char wOperStatus[2] ={0};
char wLoginMode[2] ={0};
char wFailTimes[3] ={0};
char wSuccessLoginTime[DATELENGTH+1]={0};
char wLastFailTime[LFTIMELENGTH+1]={0};
char whex_Password[2*PWDLENGTH+1]={0};
char wPwdDisableDate[PWDDISLENGTH+1]={0};
char wStartTime[STARTTIMELENGTH+1]={0};
char wClientIdentity [2] ={0};
char wTel[TELLENGTH+1]={0};
char wDemo[DEMOLENGTH+1]={0};
char wLastUpTm[LUTMLENGTH+1]={0};
char wLastUpPgm[LUPLENGTH+1] ={0};
char wChallenge[CHALLENGELENGTH+1]={0};
char wChallengeTime[CHTIMELENGTH+1]={0};
char wDAC[DACLENGTH+1]={0};
char wAuthCode[AuthCodeLENGTH+1]={0};
char loginid[LOGINIDLENGTH+1]={0};
EXEC sql end declare section;
char err[ERRORSTRLENGTH] = {0};
char c_dac[DACLENGTH + 1] = {0};
_dbgs("update operator table", OLoginId, strlen(OLoginId), 611);
memcpy(loginid, OLoginId, strlen(OLoginId)); memcpy(wOperLoginId,op->OperLoginId,LOGINIDLENGTH);
memcpy(wSysID,op->SysID,3);
memcpy(wOseq,op->Oseq,OSEQLENGTH);
memcpy(wOperId,op->OperId,OPERIDLENGTH);
memcpy(wSerialNo,op->SerialNo,SERIALNOLENGTH);
memcpy(wOperName,op->OperName,OPERNAMELENGTH);
memcpy(wOperIDCard,op->OperIDCard,OPERIDCARDLENGTH);
memcpy(wOperStatus,op->OperStatus,1);
memcpy(wLoginMode,op->LoginMode,1);
memcpy(wFailTimes,op->FailTimes,2);
memcpy(wSuccessLoginTime,op->SuccessLoginTime,DATELENGTH);
memcpy(wLastFailTime,op->LastFailTime,LFTIMELENGTH);
BintoHex((unsigned char*)whex_Password,(unsigned char*)op->Password,PWDLENGTH);
memcpy(op->hex_Password,whex_Password,2*PWDLENGTH);
memcpy(wPwdDisableDate,op->PwdDisableDate,PWDDISLENGTH);
memcpy(wStartTime,op->StartTime,STARTTIMELENGTH);
memcpy(wClientIdentity,op->ClientIdentity,1);
memcpy(wTel,op->Tel,TELLENGTH);
memcpy(wDemo,op->Demo,DEMOLENGTH);
memcpy(wLastUpTm,op->LastUpTm,LUTMLENGTH);
memcpy(wLastUpPgm,op->LastUpPgm,LUPLENGTH);
memcpy(wChallenge,op->Challenge,CHALLENGELENGTH);
memcpy(wChallengeTime,op->ChallengeTime,CHTIMELENGTH);
memcpy(wAuthCode,op->AuthCode,AuthCodeLENGTH); OperatorDAC(op,c_dac);
memcpy(wDAC,c_dac,DACLENGTH); EXEC SQL
UPDATE
GIAS_OPERATOR
SET
OperLoginId= :wOperLoginId,
SysID= :wSysID ,
Oseq=:wOseq ,
OperId=:wOperId ,
SerialNo=:wSerialNo,
OperName=:wOperName,
OperIDCard=:wOperIDCard ,
OperStatus=:wOperStatus ,
LoginMode=:wLoginMode ,
FailTimes=:wFailTimes ,
SuccessLoginTime=:wSuccessLoginTime,
LastFailTime=:wLastFailTime,
Password =:whex_Password,
PwdDisableDate=:wPwdDisableDate ,
StartTime =:wStartTime,
ClientIdentity =:wClientIdentity ,
Tel =:wTel,
Demo =:wDemo,
LastUpTm =:wLastUpTm ,
LastUpPgm =:wLastUpPgm,
Challenge =:wChallenge,
ChallengeTime =:wChallengeTime,
AuthCode =:wAuthCode ,
DAC =:wDAC
WHERE
OperLoginId= :loginid; if (sqlca.sqlcode == 1403) { /*not found*/
sprintf(err, "loginid = (%s), error(%d-%s)\n", loginid, sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
Glog(__FILE__, __LINE__, 0, "%s.\n", err);
_dbgs("ERR_STR", err, strlen(err), 611);
return ERROR_DB_NOOPERATOR;
}
else if(sqlca.sqlcode < 0 && sqlca.sqlcode != -1405) { /*ignore warning:1405*/
sprintf(err, "loginid = (%s), error(%d-%s)\n", loginid, sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
Glog(__FILE__, __LINE__, 0, "%s.\n", err);
_dbgs("ERR_STR", err, strlen(err), 611);
return ERROR_DB_UPDATEOPERATOR;
} return 0;
}
原来的数据库更新函数是这么写的:
/*按照操作员登录号更新操作员信息*/
int COperator_UpdatePropsByLoginID(char *OLoginId,OperatorProps *op)
{
EXEC sql begin declare section;
char wOperLoginId[LOGINIDLENGTH+1]={0};
char wSysID[3] ={0};
char wOseq[OSEQLENGTH+1]={0};
char wOperId[OPERIDLENGTH+1]={0};
char wSerialNo[SERIALNOLENGTH+1]={0};
char wOperName[OPERNAMELENGTH+1]={0};
char wOperIDCard[OPERIDCARDLENGTH+1]={0};
char wOperStatus[2] ={0};
char wLoginMode[2] ={0};
char wFailTimes[3] ={0};
char wSuccessLoginTime[DATELENGTH+1]={0};
char wLastFailTime[LFTIMELENGTH+1]={0};
char whex_Password[2*PWDLENGTH+1]={0};
char wPwdDisableDate[PWDDISLENGTH+1]={0};
char wStartTime[STARTTIMELENGTH+1]={0};
char wClientIdentity [2] ={0};
char wTel[TELLENGTH+1]={0};
char wDemo[DEMOLENGTH+1]={0};
char wLastUpTm[LUTMLENGTH+1]={0};
char wLastUpPgm[LUPLENGTH+1] ={0};
char wChallenge[CHALLENGELENGTH+1]={0};
char wChallengeTime[CHTIMELENGTH+1]={0};
char wDAC[DACLENGTH+1]={0};
char wAuthCode[AuthCodeLENGTH+1]={0};
char loginid[LOGINIDLENGTH+1]={0};
EXEC sql end declare section;
char err[ERRORSTRLENGTH] = {0};
char c_dac[DACLENGTH + 1] = {0};
_dbgs("update operator table", OLoginId, strlen(OLoginId), 611);
memcpy(loginid, OLoginId, strlen(OLoginId)); memcpy(wOperLoginId,op->OperLoginId,LOGINIDLENGTH);
memcpy(wSysID,op->SysID,3);
memcpy(wOseq,op->Oseq,OSEQLENGTH);
memcpy(wOperId,op->OperId,OPERIDLENGTH);
memcpy(wSerialNo,op->SerialNo,SERIALNOLENGTH);
memcpy(wOperName,op->OperName,OPERNAMELENGTH);
memcpy(wOperIDCard,op->OperIDCard,OPERIDCARDLENGTH);
memcpy(wOperStatus,op->OperStatus,1);
memcpy(wLoginMode,op->LoginMode,1);
memcpy(wFailTimes,op->FailTimes,2);
memcpy(wSuccessLoginTime,op->SuccessLoginTime,DATELENGTH);
memcpy(wLastFailTime,op->LastFailTime,LFTIMELENGTH);
BintoHex((unsigned char*)whex_Password,(unsigned char*)op->Password,PWDLENGTH);
memcpy(op->hex_Password,whex_Password,2*PWDLENGTH);
memcpy(wPwdDisableDate,op->PwdDisableDate,PWDDISLENGTH);
memcpy(wStartTime,op->StartTime,STARTTIMELENGTH);
memcpy(wClientIdentity,op->ClientIdentity,1);
memcpy(wTel,op->Tel,TELLENGTH);
memcpy(wDemo,op->Demo,DEMOLENGTH);
memcpy(wLastUpTm,op->LastUpTm,LUTMLENGTH);
memcpy(wLastUpPgm,op->LastUpPgm,LUPLENGTH);
memcpy(wChallenge,op->Challenge,CHALLENGELENGTH);
memcpy(wChallengeTime,op->ChallengeTime,CHTIMELENGTH);
memcpy(wAuthCode,op->AuthCode,AuthCodeLENGTH); OperatorDAC(op,c_dac);
memcpy(wDAC,c_dac,DACLENGTH); EXEC SQL
UPDATE
GIAS_OPERATOR
SET
OperLoginId= :wOperLoginId,
SysID= :wSysID ,
Oseq=:wOseq ,
OperId=:wOperId ,
SerialNo=:wSerialNo,
OperName=:wOperName,
OperIDCard=:wOperIDCard ,
OperStatus=:wOperStatus ,
LoginMode=:wLoginMode ,
FailTimes=:wFailTimes ,
SuccessLoginTime=:wSuccessLoginTime,
LastFailTime=:wLastFailTime,
Password =:whex_Password,
PwdDisableDate=:wPwdDisableDate ,
StartTime =:wStartTime,
ClientIdentity =:wClientIdentity ,
Tel =:wTel,
Demo =:wDemo,
LastUpTm =:wLastUpTm ,
LastUpPgm =:wLastUpPgm,
Challenge =:wChallenge,
ChallengeTime =:wChallengeTime,
AuthCode =:wAuthCode ,
DAC =:wDAC
WHERE
OperLoginId= :loginid; if (sqlca.sqlcode == 1403) { /*not found*/
sprintf(err, "loginid = (%s), error(%d-%s)\n", loginid, sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
Glog(__FILE__, __LINE__, 0, "%s.\n", err);
_dbgs("ERR_STR", err, strlen(err), 611);
return ERROR_DB_NOOPERATOR;
}
else if(sqlca.sqlcode < 0 && sqlca.sqlcode != -1405) { /*ignore warning:1405*/
sprintf(err, "loginid = (%s), error(%d-%s)\n", loginid, sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
Glog(__FILE__, __LINE__, 0, "%s.\n", err);
_dbgs("ERR_STR", err, strlen(err), 611);
return ERROR_DB_UPDATEOPERATOR;
} return 0;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货