65.9K
CodeProject 正在变化。 阅读更多。
Home

CByteArrayFile - 使用 DAO 在数据库中存储对象

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.42/5 (6投票s)

2000年3月18日

viewsIcon

76369

downloadIcon

2272

用于将对象序列化到数据库字段的类。

You HongJiang 贡献了 CByteArrayFile 和文章,Daniel Kaminski 贡献了 演示应用程序

在我的项目中,我需要使用 DAO 将一些对象序列化到数据库字段中。但是,我找不到任何支持将对象序列化到数据库字段的功能。我不得不自己实现一个。

在这个例子中,我将向您展示一个名为 CByteArrayFile 的类。它是一个 CMemFile 的派生类。使用这个类,我们可以将对象序列化到 CByteArray 对象中。然后,我们可以使用 DFX_Binary 将数据传输到数据库“长二进制”字段中。

以下是使用 CByteArrayFile 类的示例代码。

在需要序列化的类中(例如 CSomeClass

CSomeClass::TransferDataWithByteArray(CByteArray& byteArray, BOOL bStore)
{
   CByteArrayFile byFile;
   byFile.SetArray(&byteArray);    // attach byteArray with byFile
   
   if (bStore) // store object into byteArray
   {
      // create CArchive object with CByteArray File
      CArchive ar( &byFile, CArchive::store);
 
      // Call CSomeClass::Serialize function
      Serialize(ar);

      ar.Close();
   }
   else // load object from byteArray
   {
     CArchive ar( &byFile, CArchive::load);
     Serialize(ar);    // Call CSomeClass::Serialize function
     ar.Close();
   }
 
  // important!! detach byteArray with byFile. Or byteArray will be 
  // free with byFile
  byFile.Detach();
}

在使用了 CDaoRecordset 派生类的文件中,例如 CSomeDaoRecordset
CSomeDaoRecordset rs;    // rs.m_byteLongField is a CByteArray class
CSomeClass object;

// 1. Write to record
rs.Open(. . .);
rs.AddNew();
object.TransferDataWithByteArray(rs.m_byteLongField, TRUE /* store */);
. . .
rs.Update();
rs.Close();

// 2. Read from record
rs.Open(. . .);
object.TransferDataWithByteArray(rs.m_byteLongField, FALSE /* load */);
...

rs.Close();
© . All rights reserved.