Threading and COM Objects
OLE DB supports two kinds of COM objects in columns and parameters: storage objects and IPersist* objects.
Rowsets are factories of storage objects and determine the threading model of these objects. While accessing a storage object through IRowset::GetData, free-threaded rowsets return free-threaded objects, and apartment rowsets return apartment objects that will belong to the same thread.
IPersist* objects are implemented by the other parties. Their threading model is dictated by threading marking of their class factory. This marking may be absent, and if present, it can be either "Apartment" or "Both." Consumers need mechanisms to obtain information about the IPersist* object's threading marking when IRowset::GetData returns the object.
For more information about storage objects and IPersist* objects, see BLOBs and COM Objects (OLE DB).