C++MFC使用ADO调用mysql带参存储过程参数中文乱码

qin522106350 2012-12-25 04:49:07
服务器gbk
数据库gbk
表gbk

调用存储过程准备:
//创建连接对象实例
m_pConnection.CreateInstance("ADODB.Connection");
CString strConnect="..."
//使用Open方法连接数据库
m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);

_CommandPtr m_pCommand;//初始化命令对象
m_pCommand.CreateInstance("ADODB.Command");//创建命令实例
m_pCommand->ActiveConnection=m_pConnection;//设置命令对象的连接
m_pCommand->CommandText = _bstr_t("evaluate_count9");//存储过程名
m_pCommand->CommandType=adCmdStoredProc;//
m_pCommand->Parameters->Refresh();

//参数值
_variant_t vvar1,vvar2,vvar3;
vvar1=_variant_t(_bstr_t(m_CountDepartment));
vvar2=_variant_t(_bstr_t(m_DateBegin));
vvar3=_variant_t(_bstr_t(m_DateEnd));
//注意以上参 m_CountDepartment 为CString类型变量 值为:"/北京" 。。。。

_ParameterPtr ParametV;
ParametV.CreateInstance(__uuidof(Parameter));

//添加到集合
ParametV=m_pCommand->CreateParameter(_bstr_t("DepartmentName2"),adVarChar,adParamInput,32,vvar1);
m_pCommand->Parameters->Append(ParametV);

ParametV=m_pCommand->CreateParameter(_bstr_t("STARTDealDateTime"),adVarChar,adParamInput,32,vvar2);
m_pCommand->Parameters->Append(ParametV);

ParametV=m_pCommand->CreateParameter(_bstr_t("endDealDateTime"),adVarChar,adParamInput,32,vvar3);
m_pCommand->Parameters->Append(ParametV);
vvar3=_variant_t(_bstr_t(m_DateEnd));

//执行存储过程
m_pRecordset = m_pCommand->Execute(&vNull,&vNull,adCmdStoredProc);

...全文
164 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2012-12-25
  • 打赏
  • 举报
回复
你的C程序连接中需要设计一下字符集,或者在连接字符串中设置或者执行一下 set names 'gbk';
sumos 2012-12-25
  • 打赏
  • 举报
回复
引用 2 楼 iihero 的回复:
m_pConnection得到之后, 首先执行一个set names gbk 然后再执行你的存储过程。
正解。mysql在执行语句前要先设定字符集,因为mysql支持很多种字符集。
iihero_ 2012-12-25
  • 打赏
  • 举报
回复
m_pConnection得到之后, 首先执行一个set names gbk 然后再执行你的存储过程。
qin522106350 2012-12-25
  • 打赏
  • 举报
回复
注意 mysql 里边的存储过程 在数据库里边调用 给参数 执行正确 在程序里边直接执行SQL 语句 带中文参数 一样执行正确

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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