关于_RecordsetPtr对象中的一个数据类型的问题

woods2001 2009-05-31 02:18:31
m_pRecordset->GetCollect("UserName")
她返回的是一个什么类型的数据
我大概知道 她是一个COM组件中定义的一个数据类型
看到书上这样转换成CString的
CString User_Name=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("UserName");
这样是在MFC中可以实现

最换转换成LPCTSTR了是吧? LPCTSTR是一个长指针 返回一个长指针给CString对象
想知道一下对于CString的操作符=是如何重载的

目前问题是: 我现在在win32环境下进行数据库处理
在win32环境下 用CString对象 就没啥意义了··· 那我如何转换呢··

给我解释一下xia ~~
...全文
137 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
woods2001 2009-06-03
  • 打赏
  • 举报
回复
不会把
我用字符指针 无限大的啊。。。~~~
mfc168 2009-06-02
  • 打赏
  • 举报
回复
char *str;
str=(char *)(_bstr_t)m_pRecordset->GetCollect("UserName");
/*for(int i=0;str[i]!='\0';i++)
cout < <str[2];*/
cout < <str;



char *str; //这里不对,你改成 _bstr_t str;或者 char str[200];足够大
woods2001 2009-05-31
  • 打赏
  • 举报
回复
哪位大哥帮我调下
说不清楚问题是什么;;。。。
win32程序
main.cpp
#include "ADOConn.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{
ADOConn m_adoConn;
m_adoConn.OnInitDBConnect();
_bstr_t strSQL;
strSQL="select * from Users where EmpId=1";
_RecordsetPtr m_pRecordset;
m_pRecordset=m_adoConn.GetRecordset(strSQL);
/*
m_pRecordset.CreateInstance(_uuidof(Recordset));
m_pRecordset->Open(strSQL,m_adoConn.m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);*/

//string str1,str2;
//char *pstr;
char *str;
str=(char *)(_bstr_t)m_pRecordset->GetCollect("UserName");
/*for(int i=0;str[i]!='\0';i++)
cout<<str[2];*/
cout<<str;
}


ADOConn.h
#ifndef ADOCONN
#define ADOCONN
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")

class ADOConn
{
public:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
public:
ADOConn();
virtual ~ADOConn(){}
void OnInitDBConnect();
_RecordsetPtr& GetRecordset(_bstr_t bstrSQL);
BOOL ExecuteSQL(_bstr_t bstrSQL);
void ExitConnect();

};

#endif

ADOConn.cpp
#include "ADOConn.h"
#include <iostream>
ADOConn::ADOConn()
{

}

void ADOConn::OnInitDBConnect()
{
//initial the ole/com enviroment
::CoInitialize(NULL);
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect="Provider=SQLOLEDB.1;Database=HrSys;User ID=sa;Password=5221562;Data Source=(LOCAL);";
m_pConnection->Open(strConnect,"","",adModeUnknown);
if(m_pConnection->State==adStateOpen)
std::cout<<"open"<<'\n';
}
catch(_com_error e)
{
std::cout<<(char *)e.Description();
}
}
_RecordsetPtr& ADOConn::GetRecordset(_bstr_t bstrSQL)
{
try
{
if(m_pConnection=NULL)
OnInitDBConnect();
m_pRecordset.CreateInstance(_uuidof(Recordset));
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,
adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
std::cout<<(char *)e.Description();
}
return m_pRecordset;
}
void ADOConn::ExitConnect()
{
if(m_pConnection!=NULL)
m_pRecordset->Close();
m_pConnection->Close();

::CoUninitialize();
}
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
try
{
if(m_pConnection==NULL)
OnInitDBConnect();
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
std::cout<<(char *)e.Description();
return false;
}
}
woods2001 2009-05-31
  • 打赏
  • 举报
回复
LPCTSTR str;
str=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("UserName");
cout<<str;
我输出的是乱码
是不是因为输出的是ACS2码 而导致乱码?
对码制之间的转换不是特别了解··

m_pRecordset->GetCollect("UserName"); 返回的是什么码制?
为什么我转换成(LPCTSTR)乱码了

高人指点一下~ 推荐相关知识也好···都谢谢了~~
mfc168 2009-05-31
  • 打赏
  • 举报
回复
ADO一般函数的返回值都是 变体类型 variant
可以说是包含了各种类型的一种类型结构体

CString 其实也可看作一个字符指针 ,如果在WIN32下,你可以直接用LPCTSTR ,LPSTR 等,注意你程序的字符集是否是UNICODE

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧