Easy question regarding BSTR to CString
Hi, I think this will be an easy one for you.
I have an application that is reading from a database (and reading
only) using ADO. Not ADO.NET, I'm using ADO through the msado15.dll.
Everything has been going fine up until now, as I can open my
database, select my data using SQL, get field ptrs, etc.
But my database is Unicode, my application is not. This wasn't really
a problem, so I whipped up an easy little routine to extract my
string. It looks something like this (please excuse the lack of
comments, and my rather lazy coding here, this is NOT final. It was
designed to get me to the rather complex algorithm I needed to perform
following this operation. In fact, this doesn't even support
adVarChar or adLongVarChar, but it DOES demonstrate the problem.):
bool GetStringValue(FieldPtr p_ptr, CString& p_sValue)
{
int i = p_ptr->Type;
try
{
if ((p_ptr->Type == adVarWChar))
{/*Handling a string database field type*/
if (p_ptr->Value.vt != VT_NULL)
{
variant_t b = p_ptr->Value;
#ifdef _UNICODE
p_sValue.Format("%s", p_ptr->Value.bstrVal);
#else
p_sValue.Format("%S", p_ptr->Value.bstrVal);
#endif
return true;
}
}
if ((p_ptr->Type == adLongVarWChar))
{
if (p_ptr->Value.vt != VT_NULL)
{
#ifdef _UNICODE
p_sValue.Format("%s", p_ptr->Value.bstrVal);
#else
p_sValue.Format("%S", p_ptr->Value.bstrVal);
#endif
return true;
}
}
}
}
So, as you can see, I'm "cheating" and using the CString's format to
do all the hard work for me. Except I have one field with Japanese
characters in it, and this blows the roof of of Format (it fails a
_VALIDATE_RETURN in vsprintf.c due to having a requesting length of
zero). I am very unfamiliar with BSTR and while I have no issue with
writing a better routine, what approach would you recommend for
extracting the data?
Again, I've never used BSTR, so I'm not even sure what is valid. The
MSDN is being singularly unhelpful (what I've found anyway)...
Cheers,
~Scoots