哪位大神帮忙解读一下这个程序。该怎么处理
哪位大神帮忙解读一下这个程序。
刚接触编程,下面的这段程序看不太懂。请哪位大神帮忙解读一下,写个注释。
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
}
------解决方案--------------------
刚接触编程,下面的这段程序看不太懂。请哪位大神帮忙解读一下,写个注释。
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 }