none
以下代码代表什么?Visual Studio 2003 RRS feed

  • 问题

  • 以下代码代表什么?Visual Studio 2003    
    { 
            // create and open command 
            CJoyDbCommand rsAttrib; 
            if(!JoyInvokeCommand(this, servSess, rsAttrib, 
                L"select_s_a", m_Id)) 
            { 
                return false; 
            } 
            if(!HasMoreRow(rsAttrib.MoveNext())) 
            { 
                m_showInfo->QueueTimeColorText(InfoColor_Error, 
                    "read  configurations failed. not find any record.\n"); 
                return false; 
            } 
            rsAttrib.GetValue("name", m_Name); 
            rsAttrib.GetValue("type", m_Type); 
            rsAttrib.GetValue("port", m_Port); 
            rsAttrib.GetValue("region", m_Region); 
            rsAttrib.GetValue("client_id", m_Id); 
            rsAttrib.GetValue("main_ver", m_MainVer); 
            rsAttrib.GetValue("file_ver", m_FileVer); 
            rsAttrib.GetValue("ip", m_IP); 
            rsAttrib.GetValue("userdb_id", m_DbId); 
            rsAttrib.GetValue("timing_group", m_Group); 
            rsAttrib.GetValue("user_max", m_Count_Max); 
            if(m_IP != m_Config->m_IP) 
            { 
                m_showInfo->QueueTimeColorText(InfoColor_Error, 
                    "IP config is invalid. local <%s> : db <%s>.\n", 
                    (PCSTR)m_IP, (PCSTR)m_Config->m_IP); 
                return false; 
            } 
            LoadClientVersions(rsAttrib); 
    
            // load timing config. 
            if(FAILED(rsAttrib.GetNextResult())) 
            { 
                m_showInfo->QueueTimeColorText(InfoColor_Error, 
                    "failed to load timing config.\n"); 
                return false; 
            } 
    
            while(HasMoreRow(rsAttrib.MoveNext())) 
            { 
                UINT groupId = 0; 
                CString name; 
                DWORD elapse = 100; 
                rsAttrib.GetValue("group_id", groupId); 
                rsAttrib.GetValue("name", name); 
                rsAttrib.GetValue("elapse", elapse); 
                if(groupId == 0) 
                { 
                    m_defaultTiming[name] = elapse; 
                } 
                else if(groupId == m_timingGroup) 
                { 
                    m_Timing[name] = elapse; 
                } 
            } 
    以下是函数的申明: 
        CString    m_Name; 
        CString    m_serverIP; 
        UINT        m_Port; 
        UINT        m_serverId; 
        UINT        m_Type; 
        UINT        m_Region; 
        UINT        m_Id; 
        UINT        m_MainVer; 
        UINT        m_FileVer; 
        UINT        m_DbId; 
    

    rsAttrib 这个大概是申明什么的?

    以下是详细的代码:
    CJoyDbCommand 定义:
    class CJoyDbCommand : public 
        CCommand<CDynamicParameterAccessor, CRowset, CMultipleResults>
    {
    protected:
        CStringW m_commandText;
        void* m_dummy;
    
    public:
        DBROWCOUNT m_affectRows;
    public:
        CJoyDbCommand()
        {
            m_dummy = NULL;
            m_affectRows = 0;
        }
    
        bool Create(const ATL::CSession& sess, PCWSTR wszCommand);
        bool Open(bool doLog = true);
        bool Open(LONG& affectedRows, bool doLog = true);
    
        CString GetCommandTextA()
        {
            return CString(m_commandText);
        }
    
        template<typename DataType>
        bool GetParam(DBORDINAL nParam, DataType& data)
        {
            JOY_DB_VALIDATE_PARAM(nParam);
            if(!__super::GetParam(nParam, &data))
            {
                JOY_LOG_DB("failed get param<%d>'s value for command <%s>.", nParam, (PCSTR)GetCommandTextA());
                return false;
            }
            return true;
        }
        bool GetParam(DBORDINAL nParam, CString& data)
        {
            JOY_DB_VALIDATE_PARAM(nParam);
            if(!__super::GetParamString(nParam, data))
            {
                JOY_LOG_DB("failed get param<%d>'s value for command <%s>.", nParam, (PCSTR)GetCommandTextA());
                return false;
            }
            return true;
        }
    
        template<typename DataType>
        bool SetParam(DBORDINAL nParam, const DataType& data)
        {
            JOY_DB_VALIDATE_PARAM(nParam);
            if(!__super::SetParam(nParam, &data))
            {
                JOY_LOG_DB("failed set param<%d>'s value for command <%s>.", nParam, (PCSTR)GetCommandTextA());
                return false;
            }
            return true;
        }
    
        bool SetParam(DBORDINAL nParam, PCSTR data)
        {
            JOY_DB_VALIDATE_PARAM(nParam);
            if(!__super::SetParamString(nParam, data))
            {
                JOY_LOG_DB("failed set param<%d>'s value for command <%s>.", nParam, (PCSTR)GetCommandTextA());
                return false;
            }
            return true;
        }
    
        bool SetParam(DBORDINAL nParam, const CString& data)
        {
            return SetParam(nParam, (PCSTR)data);
        }
    
        // set varbinary parameters.
    	bool SetParam(DBORDINAL nParam, const void* pData, int nLen, DBSTATUS status = DBSTATUS_S_OK ) throw();
    
        void GetValue(PCSTR colName, CString& strValue);
        void GetValue(DBORDINAL nCol, CString& strValue);
        bool GetBoolean(PCSTR colName, bool& b)
        {
            UINT n = 0;
            bool r = GetValue(colName, n);
            b = (n!=0);
            return r;
        }
    
        template<typename T>
        bool GetValue(PCSTR colName, T& v)
        {
            return __super::GetValue(colName, &v);
        }
        template<typename T>
        bool GetValue(DBORDINAL nCol, T& v)
        {
            return __super::GetValue(nCol, &v);
        }
    
        HRESULT GetNextResult()
        {
            HRESULT hr = __super::GetNextResult(&m_affectRows);
            return hr;
        }
    
        bool IgnoreParam(DBORDINAL nParam);
    
        void PrepareOutput();
        HRESULT MoveNext() throw()
    	{
            if(m_spRowset != NULL)
            {
                return __super::MoveNext();
            }
            return -1;
    	}
    
    };
    2009年10月6日 12:53

答案

  • rsAttrib 的声明在前面:
    CJoyDbCommand rsAttrib;//声明一个类型为CJoyDbCommand的对象。
    至于rsAttrib的作用,则需要问写这段代码的人。JoyInvokeCommand并不是一个微软的函数。


    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年10月6日 20:16
    版主

全部回复

  • //创建并执行 
    CJoyDbCommand rsAttrib;

    rsAttrib是指当前记录.
    2009年10月6日 13:11
  • rsAttrib 的声明在前面:
    CJoyDbCommand rsAttrib;//声明一个类型为CJoyDbCommand的对象。
    至于rsAttrib的作用,则需要问写这段代码的人。JoyInvokeCommand并不是一个微软的函数。


    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年10月6日 20:16
    版主
  • 怎么都没有人来解答了呢?
    2009年10月8日 3:50