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)