Info:
Windows XP Pro SP2
Oracle 10G Express Edition
V8 Oracle Call Interface (OCI)
MSVC 8.0
I have a table that has a value column of type NUMBER(20). This column
holds unsigned 64 bit integers. However, I have had some trouble
retrieving these values using OCI. I need to have these values as
unsigned __int64 in order to use them in my application.
Attempt 1: I have tried using rset->getNumber().
char cstr[2048];
unsigned __int64 * FVecList; // properly malloced
while (rset->next ())
{
Number num = rset->getNumber(1);
// I'm actually quite stuck here. I'm not sure how to convert the
"data" of the Number object to unsigned __int64.
// The Number object seems to have methods for a variety of data
types, but not unsigned 64 bit integers.
}
Attempt 2: I have tried selecting data from this column with
to_char(value) and then using rset->getString():
char cstr[2048];
unsigned __int64 * FVecList; // properly malloced
while (rset->next ())
{
string * currStr = new string(rset->getString(1));
strcpy(cstr, currStr->c_str());
FVecList[arrayindex] = _strtoui64(cstr, NULL, 10);
arrayindex++;
delete currStr; // this causes crashes
}
This works as intended. However, task mananger indicates a significant
memory leak because 1) I can't confidently delete currStr without
having my application crash s****adically (not sure why, deleting
objects is pretty trivial), and 2) rset->getString() seems to allocate
memory as well (why, I don't know, and I don't know how to deallocate
it).
Any help is appreciated or recommendations welcome on the best way to
read this data.
Thanks in advance.


|