SQLFetch在现有GUID上返回SQL_NO_DATA_FOUND

时间:2011-11-09 14:49:41

标签: sql database guid

我的班级有这样的结构:

struct CommentData
{
   GUID           CommentID;
   GUID           GroupID;
   wchar_t        CreatorName[50];
   long           CreationDate;
} m_Data;

我的构造函数执行以下绑定:

void CCommentRecordset::CCommentRecordset( HDBC DBCHandle )
{
    SQLAllocHandle( SQL_HANDLE_STMT, DBCHandle, &m_StmtHandle );

    static SQLLEN Len;
    SQLBindCol( m_StmtHandle, 1, SQL_C_GUID, &m_Data.CommentID, sizeof(m_Data.CommentID), &Len );
    SQLBindCol( m_StmtHandle, 2, SQL_C_GUID, &m_Data.GroupID, sizeof(m_Data.GroupID), &Len );
    SQLBindCol( m_StmtHandle, 3, SQL_C_WCHAR, m_Data.CreatorName, sizeof(m_Data.CreatorName), &Len );
    SQLBindCol( m_StmtHandle, 4, SQL_C_ULONG, &m_Data.CreationDate, 0, &Len );
}

我提取记录列表的功能如下所示:

void CCommentRecordset::GetList( CommentList& Buffer, const GUID& GroupID )
{
    Buffer.clear();

    LPOLESTR IDStr;
    StringFromCLSID( GroupID, &IDStr );

    wchar_t SQL[100];
    //   swprintf_s( SQL, _countof(SQL), L"SELECT * FROM Comment WHERE GroupID='%s'", IDStr );
    //   swprintf_s( SQL, _countof(SQL), L"SELECT * FROM Comment WHERE CreatorName='pierref'" );
    //   swprintf_s( SQL, _countof(SQL), L"SELECT * FROM Comment WHERE CommentID='{BD678ADC-A1FC-48D7-AF93-35E7D917028B}'" );
    swprintf_s( SQL, _countof(SQL), L"SELECT * FROM Comment WHERE GroupID='{F126CA9D-5AEF-479E-9172-03DF5266E6E8}'" );

    SQLRETURN Result = ::SQLExecDirect( m_StmtHandle, (SQLWCHAR*)SQL.c_str(), SQL_NTS );
    if ( Result == SQL_SUCCESS )
    {
        Result = SQLFetch( m_StmtHandle );
        while ( Result == SQL_SUCCESS || Result == SQL_SUCCESS_WITH_INFO )
        {
            Buffer.push_back( m_Data );
            Return = SQLFetch( m_StmtHandle );
        };
        SQLCloseCursor( m_StmtHandle );
    }
}

现在,有趣的部分。
如果我使用“WHERE CreatorName ='pierref'”进行SQLFetch,它可以正常工作 如果我使用“WHERE CommentID ='{BD678ADC-A1FC-48D7-AF93-35E7D917028B}'”进行SQLFetch,它可以正常工作。
如果我使用“WHERE GroupID ='{F126CA9D-5AEF-479E-9172-03DF5266E6E8}'”进行SQLFetch,则会失败并显示100(SQL_NO_DATA_FOUND)

但是,使用CreatorName或CommentID从提取返回的值确实用{F126CA9D-5AEF-479E-9172-03DF5266E6E8}填充m_Data.GroupID。数据库本身确实具有正确的列名(前后没有不可见的空格)和正确的值。一切似乎都很好,我一直在这个问题上抓了90分钟。

1 个答案:

答案 0 :(得分:2)

我查看了字段之间的所有差异,并注意到GroupID字段未编入索引。据我所知,这不是SELECT语句工作的要求,但我将其编入索引只是为了看。令我惊讶的是,它现在有用了!

我不是数据库方面的专家,因此我无法理解为什么要将其编入索引。如果有人能够启发我,请做。