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






4.42/5 (6投票s)
2000年3月18日

76369

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 派生类的文件中,例如 CSomeDaoRecordsetCSomeDaoRecordset 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();
