bt=(_bstr_t)" select value from PARA_TYPE where id=2 and value='"+(_bstr_t)strtoday+(_bstr_t)"' ";
try
{
hr=rs.CreateInstance (__uuidof(Recordset));
hr=rs->Open (bt,m_pConnect.GetInterfacePtr (),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
strErrMsg.Format("20120626读取每日处理的标志时操作失败!\r\n错误信息:%s",e.ErrorMessage());
LogEvent(strErrMsg);
}
    if(!rs->EndOfFile) 
{   //LogEvent("测试66");
    LogEvent(bt);
private_int_flag=0;
return;
}
问题是: if(!rs->EndOfFile) 如果取到值,就返回,现在是这个地方好像判断出了问题,明明没值,也返回了,帮忙分析一下,连接的是oracle数据库,比较蹊跷,我以前这样写都是正常的,不胜感激

解决方案 »

  1.   

    查看一下rs的成员变量。除了EndOfFile可能还有别的来判断
      

  2.   

    你是不是改动了 SQL查询语句
      

  3.   


    ///+++++++++++ora162每月需要处理的存储过程++++++++++//
    void CServiceModule::web_deal_Month()
    {//下面首先判断是否发生了互斥的现象
    if (private_int_flag==1)
    {
    //LogEvent("A Web_Deal_Ora162_Month周期间隔较小,导致前一个周期内的任务未完成");
    private_int_flag=0;
    return;
    }
        
        ///////////////////////////////////////////////////////start
    CTime now_time;
    now_time=CTime::GetCurrentTime();
    CString strTemp=now_time.Format("%H%M");
    //LogEvent(strTime);
    long l = atol(strTemp);
    if (l<100 )   //沿用原来的模式当时这儿已经不必让判断生效了 2006/08/28
    {
    //private_int_flag=0;
    //return;
    }
    CTime curr_time;
    CString strtoday;
    curr_time=CTime::GetCurrentTime();
    strtoday=curr_time.Format("%Y%m%d");
    ////////////////////////////////////////////////////////////////end
    //LogEvent("测fucking 1");
    HRESULT hr;
    _bstr_t bt;
        _ConnectionPtr m_pConnect;
    BOOL m_bConnected=FALSE;
    _RecordsetPtr rs;
    CString strErrMsg;
    bt=(_bstr_t)" Provider=MSDAORA;Data Source=dta;User ID=xx; Password=xx";
    CoInitialize(NULL); 
    try
    {
    hr=m_pConnect.CreateInstance(__uuidof(Connection));
    ASSERT(SUCCEEDED(hr));
    hr=m_pConnect->Open (bt,_bstr_t(""),_bstr_t(""),adModeUnknown);
            ASSERT(SUCCEEDED(hr));
    m_bConnected=TRUE;
    }
    catch ( _com_error e )
    {
    long errorcount = m_pConnect->GetErrors()->GetCount(); 
    _bstr_t add;
    CString ErrorMessage,temp;
    for (short i=0;i<errorcount;i++)
    {
    add = m_pConnect->GetErrors()->GetItem(_variant_t((short)i))->GetDescription();
    temp = (char *)add;
    ErrorMessage += temp;
    }
    LogEvent("20120628 Web_Deal_Month初始连接数据库出现错误:"+ErrorMessage);
    Beep(60,120);Sleep(2000);Beep(90,240);Sleep(2000);Beep(120,1000);
    private_int_flag=0;
    return;
    }
    m_pConnect->PutCommandTimeout(0);
    //LogEvent("测fucking 2");
    //判断是否存在需要处理的任务
    CTime now_ymdhm;
    CString str_now_ymdhm;
    CString   strid;
    strid="0";
    now_ymdhm=CTime::GetCurrentTime();
    str_now_ymdhm=now_ymdhm.Format("%Y%m%d%H%M");
    bt=(_bstr_t)" testing ";
    bt=(_bstr_t)" select min(ID) ID from PARA_MONTH_DEAL_PLAN where deal_flag='N' and DEAL_DATE<='"+(_bstr_t)str_now_ymdhm+(_bstr_t)"'  " ;
    try
    {
    hr=rs.CreateInstance (__uuidof(Recordset));
    hr=rs->Open (bt,m_pConnect.GetInterfacePtr (),adOpenDynamic,adLockOptimistic,adCmdText);
    }
    catch(_com_error e)
    {
            strErrMsg.Format("20120629 Web_Deal_Month执行数据库操作失败!\r\n错误信息:%s",e.ErrorMessage());
    LogEvent(strErrMsg);
    }
    if(!rs->EndOfFile) 
    {   LogEvent(bt);
    _variant_t   vstr_id;
    vstr_id=rs->GetCollect(_variant_t((long)0));
    strid=(LPCTSTR)(_bstr_t)vstr_id;
    }
        //如果存在需要处理的计划则继续往下走
    if (strid=="0") 
    {LogEvent("测fucking 4");
    private_int_flag=0;
    return;
    }
        //LogEvent("测fucking 5");
    //首先将此次处理的计划标志改过来
    bt=(_bstr_t)" update PARA_MONTH_DEAL_PLAN set deal_flag='I' where id="+(_bstr_t)strid;
    try
    {
    hr=rs.CreateInstance (__uuidof(Recordset));
    hr=rs->Open (bt,m_pConnect.GetInterfacePtr (),adOpenDynamic,adLockOptimistic,adCmdText);
    }
    catch(_com_error e)
    {
    strErrMsg.Format("20120630 pdata月统计执行数据库操作失败!\r\n错误信息:%s",e.ErrorMessage());
    LogEvent(strErrMsg);
    }
        //取出本次处理的参数,以便往存储过程中输入参数
    _variant_t vDEAL_DATE,vMONTH_FLAG,vBILLING_CYCLE_ID,vBAK_FLAG,vFLAG;
    bt=(_bstr_t)" select DEAL_DATE, MONTH_FLAG, BILLING_CYCLE_ID, BAK_FLAG, FLAG from PARA_MONTH_DEAL_PLAN where id="+(_bstr_t)strid;
    try
    {
    hr=rs.CreateInstance (__uuidof(Recordset));
    hr=rs->Open (bt,m_pConnect.GetInterfacePtr (),adOpenDynamic,adLockOptimistic,adCmdText);
    }
    catch(_com_error e)
    {
            strErrMsg.Format("E Web_Deal_Ora162_Month执行数据库操作失败!\r\n错误信息:%s",e.ErrorMessage());
    LogEvent(strErrMsg);
    }
    if(!rs->EndOfFile) 
    {
    vDEAL_DATE=rs->GetCollect(_variant_t((long)0));
    vMONTH_FLAG=rs->GetCollect(_variant_t((long)1));
    vBILLING_CYCLE_ID=rs->GetCollect(_variant_t((long)2));
    vBAK_FLAG=rs->GetCollect(_variant_t((long)3));
    vFLAG=rs->GetCollect(_variant_t((long)4));
    }

    //执行存储过程ora162 PROC_DAILY_DEAL_FATHER
    bt=(_bstr_t)" begin PROC_MONTH_DEAL_FATHER ('"+(LPCTSTR)(_bstr_t)vMONTH_FLAG+"','"+(LPCTSTR)(_bstr_t)vBILLING_CYCLE_ID+"','"+(LPCTSTR)(_bstr_t)vBAK_FLAG+"',"+(LPCTSTR)(_bstr_t)vFLAG+(_bstr_t)");end; ";
    LogEvent(bt);
    try
    {
    hr=rs.CreateInstance (__uuidof(Recordset));
    hr=rs->Open (bt,m_pConnect.GetInterfacePtr (),adOpenDynamic,adLockOptimistic,adCmdText);
    }
    catch(_com_error e)
    {
    strErrMsg.Format("20120701 pdata月统计执行数据库操作失败!\r\n错误信息:%s",e.ErrorMessage());
    LogEvent(strErrMsg);
    }
    //首先将此次处理的计划标志改过来
    bt=(_bstr_t)" update PARA_MONTH_DEAL_PLAN set deal_flag='Y' where id="+(_bstr_t)strid;
    try
    {
    hr=rs.CreateInstance (__uuidof(Recordset));
    hr=rs->Open (bt,m_pConnect.GetInterfacePtr (),adOpenDynamic,adLockOptimistic,adCmdText);
    }
    catch(_com_error e)
    {
    strErrMsg.Format("20120702 pdata月统计执行数据库操作失败!\r\n错误信息:%s",e.ErrorMessage());
    LogEvent(strErrMsg);
    }
    /////第二步:开始数据库dts方式的导入    LogEvent("20120703 pdata月数据处理结束");
    //本次处理数据结束
    private_int_flag=0;
    return;
    }
    上面就是所有的代码,就是老进入到这个地方:
    if(!rs->EndOfFile) 
    {   LogEvent(bt);