我正在使用OLEDB连接到VC ++中的本地Oracle 11gR2数据库。我正在使用CCommand :: Open来从我的数据库中选择行,该行应该包含字符串。
当我使用GetValue来获取我的数据时,我只获得了第一个字符。 以下是我获取该数据的尝试。请注意,“GetValue”和“GetColumnName”中会出现相同的行为。
char* test = (CHAR*)cmd.GetColumnName(2);
cout << (CHAR*)cmd.GetColumnName(2) << endl;
printf_s( "%s", (CHAR*)cmd.GetColumnName(2));
printf_s( "%S", (CHAR*)cmd.GetColumnName(2)); //This one works,
//but I really need to store my data, not just print it.
我认为这是从SQL到C ++数据类型的转换问题,但我不能指责它。帮助
答案 0 :(得分:3)
LPOLESTR
是wchar_t*
字符串(感谢LRiO确认),基本上是unsigned short*
。你得到第一个字符的原因是因为每个字符占用两个字节,英文字母恰好是一个NULL字节,后跟该字母的ASCII码,当以小端格式存储时,使其成为带有一个字符的C字符串(因为字节向后存储)。
您需要使用wcout
进行打印:
wcout << cmd.GetColumnName(2);
您可以像这样存储它(及其长度通过wcslen
):
LPOLESTR ostr = cmd.GetColumnName(2);
size_t ostrlen = wcslen(ostr);