哪位大神帮忙解读一下这个程序。该怎么处理

哪位大神帮忙解读一下这个程序。
刚接触编程,下面的这段程序看不太懂。请哪位大神帮忙解读一下,写个注释。
void CElVeDlg::DataBaseForCharger()
{
char sql[2048];
char buffer[64];
ZeroMemory( sql, sizeof( sql ) );
  ZeroMemory( buffer, sizeof( buffer ) );
sprintf( sql, "INSERT INTO Charger VALUES( %d," ,m_ApplicationContext.m_pAdoContext->m_usIndexForCharger);
m_ApplicationContext.m_pAdoContext->m_usIndexForCharger++;

sprintf( 
buffer, 
"'%02d:%02d:%02d'", 
m_ApplicationContext.m_pTime->m_cHour, 
m_ApplicationContext.m_pTime->m_cMinute,
m_ApplicationContext.m_pTime->m_cSecond);
strcat( sql, buffer ); 
   
sprintf( buffer, ",%f", PowerCounter);
strcat( sql, buffer ); 
  ChargerContext * m_pCharger = NULL;
m_pCharger = m_ApplicationContext.m_pCharger;
for( BYTE i = 0; i < m_ApplicationContext.m_ucChargerNum; i++,m_pCharger++)
{
ZeroMemory( buffer, sizeof( buffer ) );
sprintf( buffer, ",%d", m_pCharger->m_usTimeCounter);
strcat( sql, buffer ); 

}
   
ZeroMemory( buffer, sizeof( buffer ) );
sprintf( buffer, ")");
strcat( sql, buffer ); 

_bstr_t sqlcmd(sql);

try
{
m_ApplicationContext.m_pAdoContext->m_pConnection->Execute( 
sqlcmd, 
NULL, 
ADODB::adExecuteNoRecords );  
}

#ifdef _DEBUG
catch( _com_error & e ) 
{
AfxMessageBox(e.Description(), MB_OK );
m_ApplicationContext.m_pApplicationFlag->bit.timetostop = 1;
}
#else 
catch( ... ) 
{
m_ApplicationContext.m_pApplicationFlag->bit.timetostop = 1;

#endif 

}


------解决方案--------------------
C/C++ code

void CElVeDlg::DataBaseForCharger()
{
    char sql[2048];
    char buffer[64];
    ZeroMemory( sql, sizeof( sql ) );//用0填充数组sql内存
    ZeroMemory( buffer, sizeof( buffer ) );//同上
    sprintf( sql, "INSERT INTO Charger VALUES( %d," ,m_ApplicationContext.m_pAdoContext->m_usIndexForCharger);
    //把串INSERT INTO Charger VALUES( %d,写到sql,其中的%d会替换成后面的那个变量的值,同printf格式控制
    //函数原型:int sprintf( char *buffer, const char *format [, argument] ... );
    m_ApplicationContext.m_pAdoContext->m_usIndexForCharger++;
    
    sprintf( 
        buffer, 
        "'%02d:%02d:%02d'", 
        m_ApplicationContext.m_pTime->m_cHour, 
        m_ApplicationContext.m_pTime->m_cMinute,
        m_ApplicationContext.m_pTime->m_cSecond);//同上
    strcat( sql, buffer ); //把sql,buffer中的字符串连接成一个串,并存到sql中
    
    sprintf( buffer, ",%f", PowerCounter);
    strcat( sql, buffer ); 
    ChargerContext * m_pCharger = NULL;
    m_pCharger = m_ApplicationContext.m_pCharger;
    for( BYTE i = 0; i < m_ApplicationContext.m_ucChargerNum; i++,m_pCharger++)
    {
        ZeroMemory( buffer, sizeof( buffer ) );
        sprintf( buffer, ",%d", m_pCharger->m_usTimeCounter);
        strcat( sql, buffer ); 
        
    }
    
    ZeroMemory( buffer, sizeof( buffer ) );
    sprintf( buffer, ")");
    strcat( sql, buffer ); 
    
    _bstr_t sqlcmd(sql);//_bstr_t是个类,具体查MSDN
//下面是异常处理    
    try
    {
        m_ApplicationContext.m_pAdoContext->m_pConnection->Execute( 
            sqlcmd, 
            NULL, 
            ADODB::adExecuteNoRecords );  
    }
    
#ifdef _DEBUG
    catch( _com_error & e ) 
    {
        AfxMessageBox(e.Description(), MB_OK );
        //API(MFC)中的对话框函数,提示内容:e.Description()返回的字符串,对话框只有确定按钮
        m_ApplicationContext.m_pApplicationFlag->bit.timetostop = 1;
    }
#else 
    catch( ... ) 
    {
        m_ApplicationContext.m_pApplicationFlag->bit.timetostop = 1;
    } 
#endif 
    
}