Мой класс имеет такую структуру:
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 );
}
}
Теперь самое интересное.
Если я SQLFetch использую "WHERE CreatorName = 'pierref'", он работает нормально.
Если я использую SQLFetch с помощью «WHERE CommentID = '{BD678ADC-A1FC-48D7-AF93-35E7D917028B}'», он работает нормально.
Если я использую SQLFetch с помощью «WHERE GroupID = '{F126CA9D-5AEF-479E-9172-03DF5266E6E8}'», он завершится с ошибкой 100 (SQL_NO_DATA_FOUND)
Но значения, возвращаемые из выборки с CreatorName или CommentID, заполняют m_Data.GroupID с {F126CA9D-5AEF-479E-9172-03DF5266E6E8}. Сама база данных имеет правильное имя столбца (без невидимых пробелов до или после) и правильное значение. Кажется, все хорошо, и я почесал свою голову в течение 90 минут.