void cusers::getdata(CString cuid)
{
fado fa;
fa.oninitadoc(); _bstr_t vsql;
vsql="SELECT * FROM users WHERE userid="+cuid; _RecordsetPtr mrst;
mrst=fa.getrst(vsql);
//cout<<cuid;
if(mrst->adoEOF==1)
cusers();
else
{
uid=atoi((_bstr_t)cuid);
uname=(LPCTSTR)(_bstr_t)mrst->GetCollect("username");
upwd=(LPCTSTR)(_bstr_t)mrst->GetCollect("userpwd");
cout<<uid<<endl;
cout<<uname<<endl;
cout<<upwd;
}
fa.exitcon();
}uname和upwd为CString变量,为什么我输出的数据是数字而不是字符串?数据库中的数据是字符串。
{
fado fa;
fa.oninitadoc(); _bstr_t vsql;
vsql="SELECT * FROM users WHERE userid="+cuid; _RecordsetPtr mrst;
mrst=fa.getrst(vsql);
//cout<<cuid;
if(mrst->adoEOF==1)
cusers();
else
{
uid=atoi((_bstr_t)cuid);
uname=(LPCTSTR)(_bstr_t)mrst->GetCollect("username");
upwd=(LPCTSTR)(_bstr_t)mrst->GetCollect("userpwd");
cout<<uid<<endl;
cout<<uname<<endl;
cout<<upwd;
}
fa.exitcon();
}uname和upwd为CString变量,为什么我输出的数据是数字而不是字符串?数据库中的数据是字符串。
解决方案 »
- 毕业两年了,还是没想好要干什么
- 关于树拖拽
- 怎么遍历树,并且将树存储,在下次程序打开时,将树画出来.
- ATL环境的一个服务工程,在服务运行时使用::SetTimer(...)定义了一个时钟,请问如何相应时钟消息,请帮忙!!
- 高分寻找印刷体文字,字母,数字的图像识别源代码
- 连接对象_ConnectionPtr中open方法总有问题,郁闷!!
- InstallShield安装程序制作趣味问题。
- MFC的CDC打印问题
- 我想学习网络编程,可我只有一台机子,请问能在单机上学习网络编程吗?
- MFC中怎样将多个Edit Control中的值存放到一个数组中
- vc dialog里面的web页面,如何拦截页面弹出的"是否脚本运行"对话框
- 我想实现视频的同步播放
uname=(LPCTSTR)(_bstr_t)(mrst->Fields->GetItem(_variant_t("username"))->Value);
_variant_t varuname,varupwd;
varuname = mrst->Fields->GetItem(_variant_t("username"))->Value;
........
你可以判断一下取得的是否为空
if(varuname.vt!=VT_NULL)
{
uname = (LPCTSTR)_bstr_t(varuname);
........
}
推荐你看看《ADO开发指南》。。
var = pRst->GetCollect("userid");
if(var.vt != VT_NULL)
cout<<"姓名:"<<(LPCTSTR)(_bstr_t)var<<" ";
var =pRst->GetCollect("username");
if(var.vt != VT_NULL)
cout<<"密码"<<(LPCTSTR)(_bstr_t)var<<endl;
pRst->MoveNext();
_RecordsetPtr mrst;CoInitialize(NULL);
mrst.CreateInstance(__uuidof(Recordset));_bstr_t vsql;
vsql="SELECT * FROM users WHERE userid="+cuid;
mrst>Open(vsql,_variant_t((IDispatch*)m_pConn,true),
adOpenStatic,adLockOptimistic,adCmdText);if(mrst->adoEOF==1)
cusers();
else
{
uid=atoi((_bstr_t)cuid);
uname=(LPCTSTR)(_bstr_t)mrst->GetCollect("username");
upwd=(LPCTSTR)(_bstr_t)mrst->GetCollect("userpwd");
cout <<uid <<endl;
cout <<uname <<endl;
cout <<upwd;
}
我的类是这么写的
void fado::oninitadoc()
{
::CoInitialize(NULL);
try
{
mcon.CreateInstance("ADODB.Connection");
_bstr_t strcon="Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=Gavin;Initial Catalog=userman;Data Source=GAVIN\\SQLEXPRESS";
mcon->Open(strcon,"","",adModeUnknown);
}
catch(_com_error &e)
{
cout<<e.Description();
//MessageBox(e.Description());
}
}_RecordsetPtr& fado::getrst(_bstr_t bstrsql)
{
try
{
if(mcon==NULL)
oninitadoc();
mrst.CreateInstance(__uuidof(Recordset));
mrst->Open(bstrsql,mcon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
cout<<e.Description()<<endl;
//AfxMessageBox(e.Description());
} return mrst;
}BOOL fado::exesql(_bstr_t bstrsql)
{
_variant_t RecordsAffected;
try
{
if(mcon==NULL)
oninitadoc();
mcon->Execute(bstrsql,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
cout<<e.Description()<<endl;
//AfxMessageBox(e.Description());
return false;
}
}void fado::exitcon()
{
if(mrst!=NULL)
mrst->Close();
mcon->Close(); ::CoUninitialize();
}感觉这里面好像没有什么问题。还有用你上面的方法,捕捉到的异常是"连接无法用于执行此操作。在此上下文中它可能已被关闭或无效"。不能是我连接那个地方出了问题吧??
把mrst->Open(bstrsql,mcon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
你改成如下试试:
mrst->Open("select * from 表名",_variant_t((IDispatch*)mcon,true),
adOpenStatic,adLockOptimistic,adCmdText);
我是把“select * from users”作为参数给写到程序里的,这种和你那种做法得出的结果是一样的,我的程序都已经贴出来了,还能是哪里出的问题呢?连接数据库语句没有报任何错误,这样是不是就说明已经通过了呢?
请问您的QQ或者MSN是多少?这个问题需要赶快解决,通过CSDN速度有点慢,谢谢