Roguewave错误9 [ENDOFFETCH] End Of Fetch - 任何人都知道这意味着什么?

时间:2014-06-04 20:53:29

标签: sql-server rogue-wave

好的,我正在与我的工作约会这个关于我多年未编写的库的问题......我的代码自20世纪90年代末以来一直在使用Roguewave的DBTools ++在Visual Studio 6.0 C ++中编写。

突然,对于特定情况,查询失败,RWDBStatus指示错误代码9,消息是[ENDOFFETCH}结束获取。 当我尝试使用适当的键运行下面的查询时,我得到了这个奇怪的错误。注意 - 我还将更改代码以更具体地说明哪个查询失败,尽管它似乎是第二个查询失败,因为只有在第一个查询返回值时才会执行...

那么,我的问题是 - 有没有人知道在这种情况下“获取结束”是什么意思?目前还没有找到我在哪里寻找这个...... 这是错误消息,代码如下......

06/04/2014 16:00:40 FindSignature() - failed to execute!
06/04/2014 16:00:40 ErrorCode = 9,ErrorMsg  = [ENDOFFETCH] End of Fetch 
06/04/2014 16:00:40 VendCode1 = 0,VendCode2 = 0 
06/04/2014 16:00:40 VendMsg1 = ,VendMsg2 =  

这是我的代码:

bool result = false;
RWDBTable tblRMSUsers = m_RMSDatabase.table( "RMSUsers" );
RWDBSelector selRecord = m_RMSDatabase.selector();
selRecord << tblRMSUsers["ExternalKey"];
selRecord.where( tblRMSUsers["InternalKey"] == lLinkToUser );
RWDBReader rdrRecord = selRecord.reader(theConnection);
if( rdrRecord() )
{
    RWCString s;
    rdrRecord >> s;
    // Changed to use view_SwitchUsers2 which includes deleted / inactive users...
    RWDBTable tblSwitchUsers = m_RMSDatabase.table( "view_SwitchUsers2" );
    RWDBSelector selRecord = m_RMSDatabase.selector();
    selRecord << tblSwitchUsers ["Signature"];
    selRecord.where( tblSwitchUsers ["SID"] == s );
    RWDBReader rdrRecord1 = selRecord.reader(theConnection);
    if(rdrRecord1 ())
    {
        rdrRecord1 >> blob;
        result = true;
    }
    else 
    {
         RWDBStatus theStatus = rdrRecord1.status();
         TraceStr("FindSignature() - failed to execute!");
         TraceStr("ErrorCode = %d,ErrorMsg  = %s ", theStatus.errorCode(), theStatus.message() );      
         TraceStr("VendCode1 = %d,VendCode2 = %d ", theStatus.vendorError1(), theStatus.vendorError2() );
         TraceStr("VendMsg1 = %s,VendMsg2 = %s ", theStatus.vendorMessage1(), theStatus.vendorMessage2() );
         return false;
    }

}

任何见解都表示赞赏!

2 个答案:

答案 0 :(得分:0)

当没有更多结果要从数据库中读取时,将提取结束设置为状态。

您确定您的查询未返回空结果集吗?

答案 1 :(得分:0)

好吧,我不能确切地说为什么我得到了这个结果。我可以说我在Management Studio中的同一用户帐户下运行了完全相同的SQL(它是一个SQL Server 2008R2数据库)并且都运行良好......

有趣的是(总是其中一个&#34;有趣的&#34;曲折,是吗?)在我们连接的数据库中执行的视图实际上是返回从另一个完全限定的表中查询的数据DB在同一台服务器上。此视图/查询适用于所有&#34;较旧的&#34;记录,但最近添加的两个记录导致了问题。但问题只发生在使用DBTools库执行查询时...

我略微改变了视图(添加WITH(NOLOCK)以使其更有效率,因为没有脏读的可能性)并且突然问题消失了。我怀疑改变它的行为可能会以某种方式影响访问计划?

我只是兴高采烈地说问题已经消失了。使用这段代码十多年了,而且我从来没有见过这个结果......希望我确切地知道是什么导致了它以及它修复了什么,但可能永远不会... ...