我在 VC++ 中使用 OLEDB 连接到我的本地 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++ 数据类型的转换问题,但我无法确定。帮忙?
最佳答案
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);
关于c++ - 选择语句和隐式转换只给我字符串的第一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8825917/