函数源码定义如下://参数值对入库插入临时表
bool CDB::InsertParamValue(const LPNS_DBR pDbData)//参数数据入库
{
if(!IsOpen())
{
WriteLine("未连接数据库,不能保存参数数据");
return false;
}
CString sql;
TRY
{
m_pDB->BeginTrans();
LPPARAMVALUE p=pDbData->pParamValue;
for(int i=0;i<pDbData->paraCount;i++)
{
sql.Format("insert into cl_devicepara_temp(deviceid,qn,cn,oldqn,para_name,para_value)values('%s','%s','%s','%s','%s','%s')",
pDbData->MN,pDbData->QN,pDbData->CN,pDbData->OLDQN,p->paraName,p->paraValue);
m_pDB->ExecuteSQL(sql);
WriteLine(sql);
p++;
Sleep(1000);
}
m_pDB->CommitTrans();
return true;
}
CATCH(CDBException, dbe)
{
CString s="过程:InsertNsDBR插入参数信息到数据库出现异常:"+dbe->m_strError;
WriteLine(s);
WriteLine("对应SQL语句为:\n"+sql);
if((m_nErrorLevel=GetDBExceptionErrorLevel(dbe))==ERROR_FATAL)
{
s="该错误为致命的错误,数据库关闭";
WriteLine(s);
TRACE(s+"\n");
this->CloseDB();
}
return false;
}
END_CATCH

}数据库是ORACLE9I,操作系统:windows2003
变量:m_pDB是一个MFC ODBC的数据库类CDatabase
现象:执行sql语句没有报告错误、异常,设置了断点,单步调试时执行SQL语句能成功,但是没有设置断点时运行就是不行,数据库表里怎么也没有插入的记录,一般每次插入的记录数量是3-5条记录,一个月也不会执行几次这个函数的。
这个现象请教大家,可能什么原因引起的?

解决方案 »

  1.   

    一般这样的问题都是语句操作耗时的问题.. 你不加Sleep(1000); 可以吗?另外,在sql语句的最后添加";"..:
    即:sql.Format("insert into cl_devicepara_temp(deviceid,qn,cn,oldqn,para_name,para_value)values('%s','%s','%s','%s','%s','%s');", 
    pDbData->MN,pDbData->QN,pDbData->CN,pDbData->OLDQN,p->paraName,p->paraValue); 
      

  2.   

    Sleep(1000)就是模拟单步调试的时间,也不行,本来是没有Sleep(1000)语句的,我这个软件大量用到类似的操作,其他地方目前没有发现这个问题;关于语句后面加分号,我可以试试,但是以前没有这么用过
      

  3.   

    另外说明:上面动态构建的SQL语句复制到PL/SQL中执行也没有问题