【发布时间】:2010-12-14 00:06:34
【问题描述】:
我有一个需要扩展的旧 MFC 项目。对于数据库操作,我使用从 CRecordSet 派生的类,并将 Oracle BLOB 绑定到 CByteArray。当我检索带有空 blob 的行时,我得到一个大小为 1 字节且值为 0xFF 的数组。有没有办法检查数据库中的字段是否实际上为 NULL?还是这个 0xFF 数组实际上是一个表示空 BLOB 的值?
【问题讨论】:
标签: visual-c++ mfc blob
我有一个需要扩展的旧 MFC 项目。对于数据库操作,我使用从 CRecordSet 派生的类,并将 Oracle BLOB 绑定到 CByteArray。当我检索带有空 blob 的行时,我得到一个大小为 1 字节且值为 0xFF 的数组。有没有办法检查数据库中的字段是否实际上为 NULL?还是这个 0xFF 数组实际上是一个表示空 BLOB 的值?
【问题讨论】:
标签: visual-c++ mfc blob
好的,我找到了。函数为CRecordset::IsFieldNull,参数为绑定的CByteArray对象的地址,该函数只能在Open()和Close()之间使用。像这样的:
void CMySet::DoFieldExchange(CFieldExchange* pFX)
{
...
RFX_Binary(pFX, _T("[THE_BLOB]"), m_TheBlob, MAX_BLOB_SIZE);
}
void CMySet::ReadBlob(CByteArray& theBlob, BOOL& isNull)
{
m_strFilter = ...;
Open();
isNull = IsFieldNull(&m_TheBlob);
if (!isNull)
theBlob.Copy(m_TheBlob);
Close();
}
【讨论】: