本程序是通过ADO访问数据库里内容并输出,
结果发现在以下程序中,直接输出“(char*)(_bstr_t)(m_pRecordset->Fields...”则结果正确,
而输出“sName”则全变成了乱码。
不知道字符串操作哪里出错了,谢谢!
while(m_pRecordset->adoEOF==VARIANT_FALSE)
{
//Retrieve column's value:
char *sName=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("au_lname"))->Value);
cout<<(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("au_lname"))->Value)<<endl;
cout<<sName<<endl; //上行输出正确!!该行输出变成乱码!!
m_pRecordset->MoveNext();
}
结果发现在以下程序中,直接输出“(char*)(_bstr_t)(m_pRecordset->Fields...”则结果正确,
而输出“sName”则全变成了乱码。
不知道字符串操作哪里出错了,谢谢!
while(m_pRecordset->adoEOF==VARIANT_FALSE)
{
//Retrieve column's value:
char *sName=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("au_lname"))->Value);
cout<<(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("au_lname"))->Value)<<endl;
cout<<sName<<endl; //上行输出正确!!该行输出变成乱码!!
m_pRecordset->MoveNext();
}
VC6 ?
VC2005 ?UNICODE 工程吗?
改成Unicode方式看看。
我使用的是VC6下的WIN32 CONSOLE APPLICATION工程,没有涉及到中文
:
列名 数据类型 长度 允许空
au_lname varchar 40 允许空
换成字符串类型呢?
2.改为string sName=(LPCSTR)(bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("au_lname"))->Value); 编译,出现如下错误:
D:\VC\c_ado\c_oracle.cpp(54) : error C2065: 'string' : undeclared identifier
--->
_variant_t var;
var = m_pRecordset->Fields->GetItem(_variant_t("au_lname"))->Value;
char *sName = var.bstrVal;
-------
这样呢?
char *sName = var.bstrVal; 该行出现问题
D:\VC\c_ado\c_oracle.cpp(55) : error C2440: 'initializing' : cannot convert from 'unsigned short *' to 'char *'
这样看看,在MFC用过,,
{
m_pRecordset->MoveFirst();
while(m_pRecordset->adoEOF==VARIANT_FALSE)
{
char *sName=(char*)(_bstr_t)m_pRecordset->GetCollect("au_lname");
cout<<(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("name"))->Value)<<endl;
cout<<sName<<endl;
m_pRecordset->MoveNext();
}
}
catch (_com_error &e)
{
cout<<"error 5!"<<endl;
}
但我的工程是win32 console application工程,好象不能用CString吧。