我的班级有这样的结构:
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语句工作的要求,但我对它进行索引只是为了查看。令我惊讶的是,它现在起作用了!
我不是数据库方面的专家,所以我不明白为什么要给它编索引。如果有人能启发我,请照做。