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