How do I get data from buffer after call to IRowset GetData?

Carl McClellan <[email protected]> Wed, 24 Apr 2002 11:23:56 -0400
Newsgroups gmane.comp.windows.devel.oledb.devel
Message-ID <D14D95745752104AA47F7D338026151B1214CC@cltvelc001.velsol.ireadyworld.com>
Hi everybody,

I have a couple of questions about getting data out of a buffer after
calling IRowset GetData.
I have allocated a BYTE array with the appropriate number of bytes based on
the max row size....

BYTE* pBuffer = (BYTE*)malloc(dwOffset);

After the call to GetData I am ready to get the data for each column...


hr = pIRowset->GetData(rghRows[0],hAccessor,pBuffer);

for (ULONG ulCurrentCol = 0; ulCurrentCol < lNumCols; ulCurrentCol++)
{

        .... Get column data

}



The problem I am having is accessing certain types of data from the buffer.
If pBindings is my array of DBBINDING structures, then I access the data
THUSLY

pBuffer[pBindings[ulCurrentCol].obValue]


Now, I assume that obValue is a 32 bit value that holds a pointer to the
real data so in
Order to access the data, I need to dereference the pointer and cast the
BYTE away to whatever....

LONG *pLongValue =
reinterpret_cast<LONG*>(&pBuffer[pBindings[ulCurrentCol].obValue]);

DOUBLE *pDoubleValue =
reinterpret_cast<DOUBLE*>(&pBuffer[pBindings[ulCurrentCol].obValue]);

LPWSTR pwszString = (LPWSTR)&pBuffer[pBindings[ulCurrentCol].obValue];

And so on and so forth....


The problem is that I can never seem to get any meaningfull  data out of
columns that return
Doubles, currency, or dbtimestamp values. Having said that, I know that the
status is DBSTATUS_S_OK
(because I am binding VALUE | LENGTH | STATUS when I bind the columns).


The platform I am using is SQL Server CE (this is a program I am writing on
a Pocket PC device).


I would LOVE to see some sample code that somebody has written that extracts
data and tests the status
Of any coulumn/type.

I hope this was clear....

Carl McClellan
Software Engineer
Velocitor Solutions <http://www.velocitorsolutions.com>
704-731-5396(P)
704-527-1234(F)
770-633-7427(M)