我第一次使用vc++来访问sql server2000数据库。可是我不知道为何记录集字段返回的值是乱码。请问谁知道原因。
初始化接口:
BOOL InitAdo()
///////////This is a function to initinalize the object of Adodb
{
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_WNDW);
HRESULT hr;
//_RPT0(_CRT_WARN,"Pass Ok");
try
{
CoInitialize(NULL);
}
catch (_com_error *e)
{
_RPT1(_CRT_WARN,"Error:%s",(char*)( e->Description()));
}
//_RPT0(_CRT_WARN,"Pass Ok");
try
{
hr=pConn.CreateInstance("ADODB.Connection");
hr=pRecordset.CreateInstance("ADODB.Recordset");
//_RPT0(_CRT_WARN,"Pass Ok");
///////////////To set connection here
//pConn->Open("Provider=sqloledb;Data Source=AppDate;UId=sa;PWD=cloudq;","","",adModeUnknown);
pConn->Open( "dsn=AppData;uid=sa;pwd=cloudq;","","",adModeUnknown);
}
catch (_com_error *e)
{
_RPT1(_CRT_WARN,"Error:%s",(char*)( e->Description()));
}
return TRUE;
}取得记录集并用RPT1来显示字段值:
BOOL GetRecordset()
{
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_WNDW);
_variant_t var;
char *StrId;
char *StrContent;
char *SqlString="SELECT * FROM TableData";
try
{
pRecordset->Open(SqlString,pConn.GetInterfacePtr(),adOpenDynamic,
adLockOptimistic,adCmdText);
}
catch (_com_error *e)
{
_RPT1(_CRT_WARN,"Error:%s",(char*)( e->Description()));
}
//var=pRecordset->GetCollect("Aid");
var=pRecordset->Fields->GetItem ("Aid")->Value;
_ASSERT(var.vt!=VT_NULL);
StrId=(char *)_bstr_t(var);
// StrId=(LPCSTR)_bstr_t(var);
_RPT1(_CRT_WARN,"StrId:%s",StrId); var=pRecordset->GetCollect ("AContent");
StrContent=(char *)_bstr_t(var);
_RPT1(_CRT_WARN,"StrContent:%s",StrContent);
return TRUE;
}
结果输出:
StrId "铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪"
初始化接口:
BOOL InitAdo()
///////////This is a function to initinalize the object of Adodb
{
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_WNDW);
HRESULT hr;
//_RPT0(_CRT_WARN,"Pass Ok");
try
{
CoInitialize(NULL);
}
catch (_com_error *e)
{
_RPT1(_CRT_WARN,"Error:%s",(char*)( e->Description()));
}
//_RPT0(_CRT_WARN,"Pass Ok");
try
{
hr=pConn.CreateInstance("ADODB.Connection");
hr=pRecordset.CreateInstance("ADODB.Recordset");
//_RPT0(_CRT_WARN,"Pass Ok");
///////////////To set connection here
//pConn->Open("Provider=sqloledb;Data Source=AppDate;UId=sa;PWD=cloudq;","","",adModeUnknown);
pConn->Open( "dsn=AppData;uid=sa;pwd=cloudq;","","",adModeUnknown);
}
catch (_com_error *e)
{
_RPT1(_CRT_WARN,"Error:%s",(char*)( e->Description()));
}
return TRUE;
}取得记录集并用RPT1来显示字段值:
BOOL GetRecordset()
{
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_WNDW);
_variant_t var;
char *StrId;
char *StrContent;
char *SqlString="SELECT * FROM TableData";
try
{
pRecordset->Open(SqlString,pConn.GetInterfacePtr(),adOpenDynamic,
adLockOptimistic,adCmdText);
}
catch (_com_error *e)
{
_RPT1(_CRT_WARN,"Error:%s",(char*)( e->Description()));
}
//var=pRecordset->GetCollect("Aid");
var=pRecordset->Fields->GetItem ("Aid")->Value;
_ASSERT(var.vt!=VT_NULL);
StrId=(char *)_bstr_t(var);
// StrId=(LPCSTR)_bstr_t(var);
_RPT1(_CRT_WARN,"StrId:%s",StrId); var=pRecordset->GetCollect ("AContent");
StrContent=(char *)_bstr_t(var);
_RPT1(_CRT_WARN,"StrContent:%s",StrContent);
return TRUE;
}
结果输出:
StrId "铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪"
解决方案 »
- vc++中dbmssocn是什么意思?
- CTreeCtrl控件展开时,TVE_COLLAPSERESET怎么用?
- send message和post menssage的区别
- 用什么函数可以把一个整数变量在窗口中显示出来?
- DEBUF编译通过,release通不过,说我有个全局变量没有定意,why
- 怎样在View(CListView)中显示动态的时间?
- 请问如何读写mp3文件的IDv1和IDv2标签?
- 求助!请问哪位大哥知道DXF文件的各个要素对应的属性代码?
- 大家讨论,在线防毒软件是如何实现实时监控数据流的?
- 动态连接库和静态连接库有什么区别?
- 工具栏怎样才能显示256色图像?
- 关于程序打包的问题,多谢。
TheValue = m_pRecordset->GetCollect("BIG_NAME");//得到字段BIG_NAME的值
if(TheValue.vt!=VT_NULL) //判断不为空
****=(char*)_bstr_t(TheValu);
是什么意思。
我写成
if(var.vt!=VT_NULL) //判断不为空
StrId=(char*)_bstr_t(var);
结果还是:"铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪铪"
可以了。
不过这是为什么?
_com_util::ConvertBSTRToString()是什么意思?
我写成strcpy(StrId,(char *)_bstr_t(var));为何也不行?