gpt4 book ai didi

SQLFetch 在现有 GUID 上返回 SQL_NO_DATA_FOUND

转载 作者:搜寻专家 更新时间:2023-10-30 23:19:40 24 4
gpt4 key购买 nike

我的类(class)有这样的结构:

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

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

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 分钟。

最佳答案

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

我不是数据库专家,所以我不明白为什么它必须被索引。如果有人能启发我,请做。

关于SQLFetch 在现有 GUID 上返回 SQL_NO_DATA_FOUND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8066740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com