VARCHAR 数据不应该转换为 char * (MSSQL OLE DB)?
Shouldn't VARCHAR data be converted to char * (MSSQL OLE DB)?
在一个c++程序中,我试图使用OLE DB从MSSQL数据库读取数据。我试图读取的列是VARCHAR类型。列中的数据是从多值数据库导入的。有时列中的数据中有分隔符。分隔符是一个值标记(0Xfd)。我将从表中读取的数据转换为char *,如下所示:
retcode = WideCharToMultiByte(CP_UTF8, 0, (WCHAR*)pDBColumnAccess[nCol].pData, -1, (char *)pReadBuf, pDBColumnAccess[nCol].cbDataLen, NULL, NULL);
如果数据不包含上述分隔符-值标记(0xfd),则一切正常。但是,当有分隔符时,在转换的数据中,值标记将被一些垃圾字符替换。
在VARCHAR的情况下,我不应该转换为char *吗?仅仅按原样复制数据而不进行任何转换是否足够?
WideCharToMultiByte
从UTF-16转换而来,然而在UTF-16中没有0xFD
字符这样的东西。所有字符都被编码为至少2字节。你指的是0x00FD
(甚至是0xFD00
)吗?
此外,UTF-8(您指定的CP_UTF8
是您的"目标"编码)并不能保证所有字符都将被编码为一个字节。
根据UTF Converter:
- UTF-16
00FD
转换为UTF-8C3 BD
。 - UTF-16
FD00
转换为UTF-8EF B4 80
。
这就是你得到的吗?
相关文章:
- OLE DB 大容量复制操作始终将 true 加载到位列中
- ATL OLE DB Consumer Templates 与 Microsoft OLE DB Driver for
- 将 OLE 自动化日期 (OADate) 双精度转换为结构 tm,而不使用 VariantTime到SystemTime
- 使用 IDispatch::调用进行 OLE 交互的参数构造
- 任何用于PostgreSQL的OLE DB提供商/消费者
- NanodBC从Linux连接到MSSQL
- Borland C++ - 使用OLE使用Word打开RTF文件
- 在本机应用中开放脱离的OLE二进制
- 如何将负整数传递给COM/OLE函数
- 从 C# 如何调用需要 *VARIANT 参数的非托管 OLE 接口
- 0x80020009 OLE异常访问除0以外的任何数字
- MFC ole服务器移植到较新版本 - afxgetThread返回null
- Ole 拖放故障排除
- for 循环中的 OLE 宏
- 试图通过C ODBC连接连接到MSSQL,但找不到正确的演示
- 通过ODBC在Linux上连接到MSSQL
- MSSQL在库中找不到函数
- 使用MSVSc++创建OLE组件库
- VARCHAR 数据不应该转换为 char * (MSSQL OLE DB)?
- 使用IRow::GetColumns (OLE DB)(MSSQL)获取列数据