CMultipleResults顾名思义,即多结果的意思。那么什么时候会出现多结果呢?考虑这样的语句command.Open(session, "SELECT Name FROM Students SELECT Degree FROM Lovers");该语句一次性执行了两条SQL查询命令,返回的结果自然有两个咯。CCommand的第三个模板参数TMultiple就用于决定对多结果的支持。TMultiple有默认实参CNoMultipleResults,即关闭对多结果的支持。在这种情况下执行上述语句是无法获取第二条SQL查询命令的结果的。
当TMultiple取CMultipleResults时,CCommand会继承m_spMultipleResults属性。从sp前缀可以知道这是一个智能指针,在析构的过程中会自动调用Release方法。而Release又依赖于当前已加载COM库(调用CoInitialize)。所以,如果你在CCommand对象撤销前调用了CoUninitialize,则必须在该调用前首先手动调用m_spMultipleResults的Release方法。