我的班级有这样的结构:

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数据)
但是,使用creatorname或commentid从fetch返回的值确实用{f126ca9d-5aef-479e-9172-03df5266e6e8}填充m_data.groupid。数据库本身确实有正确的列名(前后没有不可见的空格)和正确的值。一切看起来都很好,我已经为这件事绞尽脑汁90分钟了。

最佳答案

我查看了字段之间的所有差异,发现groupid字段没有索引。据我所知,这不是select语句工作的要求,但我对它进行索引只是为了查看。令我惊讶的是,它现在起作用了!
我不是数据库方面的专家,所以我不明白为什么要给它编索引。如果有人能启发我,请照做。

10-04 18:04