c++ - 选择语句和隐式转换只给我字符串的第一个字符

标签 c++ database string oledb

我在 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/

相关文章:

c++ - ->first/second 到一个空的 map 迭代器开始

c# - 使用 native C++ 中的通用 Windows C# 类库

ios - 如何复制两个标签的结果?

c++ - 怀疑与自创建继承类的链接问题

mysql - 如何将1小时添加到mysql中的默认值currrent_timestamp?

c# - 如何以编程方式在 C# 中创建 Microsoft Access 数据库?

mysql - 返回 2014 年之后的日期的问题

python: 'str' 对象没有属性 'iteritems'

java - 避免 Java 中的重复字符串

c++ - 对某些 OpenGL 函数的 undefined reference (如果它们尚未在 main 中调用)