在 MFC 中处理 NULL BLOB

发布于 2024-10-07 05:41:25 字数 188 浏览 1 评论 0原文

我有一个旧的 MFC 项目需要扩展。对于数据库操作,我使用从 CRecordSet 派生的类,并将 Oracle BLOB 绑定到 CByteArray。当我检索包含 null blob 的行时,我得到一个大小为 1 字节、值为 0xFF 的数组。有没有办法检查数据库中的字段是否实际上为 NULL?或者这个 0xFF 数组实际上是一个表示空 BLOB 的值吗?

I have an old MFC project that I need to expand. For database operations I use a class derived from CRecordSet, and bind Oracle BLOB to CByteArray. When I retrieve a row with null blob, I get an array with size of 1 byte, and value 0xFF. Is there a way to check if a field is actually NULL in database? Or is this 0xFF array actually a value denoting a null BLOB?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌吟 2024-10-14 05:41:25

好的,我找到了。该函数为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();
}

OK, I found it. The function is CRecordset::IsFieldNull, the parameter is the address of bound CByteArray object, and the function can be only used between Open() and Close(). Something like this:

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();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文