我在更新表的时候,有的属性我不需要更新.我现在只想更新有变化的属性,但是可能这次操作这个属性修改了,另外一个操作这个属性没有被修改.我想把这些统一到一个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;
}