以下代码代表什么?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;
}
};