2009-08-25 16 views

回答

0

CDynamicAccessor類將使用DBTYPE_UNKNOWN覆蓋該列的原始DBTYPE值。爲了獲得原始的DBTYPE,我們需要調用GetColumnInfo函數。的如何做到這一點的一個例子是包含在Visual Studio 2008米中的樣品的DynamicConsumer示例應用:

// the following case will handle BLOBs binded as ISequentialStream/IStream pointer 
if(dbtype == DBTYPE_IUNKNOWN) 
{ 
    // first we have to determine what was the column's type originally reported by the provider 
    CComHeapPtr<DBCOLUMNINFO> spColumnInfo; 
    CComHeapPtr<OLECHAR> spStringsBuffer; 
    DBORDINAL nColumns = 0; 
    HRESULT hres = rs.CDynamicAccessor::GetColumnInfo(rs.m_spRowset, &nColumns, &spColumnInfo, &spStringsBuffer); 
    ATLASSERT(SUCCEEDED(hres)); 
    ATLASSERT(col <= nColumns); 
    DBTYPE wType = spColumnInfo[col-1].wType; 
    ... 
} 

的替代的解決方案是設置CDynamicAccessor到DBBLOBHANDLING_NOSTREAMS,這似乎導致少得多的複雜的代碼來處理數據加載(你可以在完整的VS2008示例代碼中看到這一點)。 但是,我不確定爲什麼使用流是默認選項,並且如果沒有使用流,還有什麼缺點。

相關問題