VS2013 MFC中操作MySQL数据库

        由于项目需要,需要在MFC中操作服务器中的数据库(测试的代码是在先得到在对话框中所输入的帐号密码,然后从服务器上的数据库中查询是否有此用户以及密码是否正确)。在此先吐槽下微软的东西真难用,我在win32控制台应用程序中所写的操作代码可以很完美的运行。但是一放到MFC的项目中就各种报错。无奈之下查看了类似sql::SQLString等相关源代码,最终经过一个多小时搞定了。其实主要毛病就出在各种各样字符串的转换。。。

    //检查是否输入信息
CString Cname;
m_account.GetWindowText(Cname);
CString Cpassword;
m_accountPassword.GetWindowText(Cpassword);
if (Cpassword == _T("")||Cname==_T("")){
MessageBox(_T("请输入用户名和密码"), _T("提示"), MB_OK);
return;
}
//连接数据
try
{
sqlDriver = sql::mysql::get_mysql_driver_instance();
sqlConn = sqlDriver->connect("tcp://115.159.124.254:3306/HomeProtector", "hp", "homeprotector2013");
MessageBox(_T("数据库成功"), _T("w"), MB_OK);
}
catch (...)
{
MessageBox(_T("数据库失败"), _T("w"), MB_OK);
}


//检查账户是否有效
sql::Statement* stat = sqlConn->createStatement();
stat->execute("set names 'gbk'");

//将CString转换成string
USES_CONVERSION;
string name(W2A(Cname));

//构造sql执行语句,这里可以用sql::PreparedStatement* 但在设置参数时(setString(,))会出现错误.估计也是字符串的错,等空了再来验证
name = "'" + name + "'";
string str = "select password from USERS where username=" + name;

//string先转const char*再转为SQLString
sql::SQLString sql = str.c_str();//利用的sql::SQLString中  const SQLString & operator=(const char * s)
//  {
// realStr = s;
// return *this;
// }

//不知道为什么const SQLString & operator=(const std::string & rhs)这个函数会出错。。。总之SQLString和string有关的函数在我使用的                                                                   //时候都有错,于是拿const char*当中间跳板

//执行sql语句
ResultSet *res = stat->executeQuery(sql);
if (res->next()){
string spass(res->getString("password").c_str());

//string转CString
CString CSpass(spass.c_str());
if (Cpassword == CSpass){
MessageBox(_T("帐号验证成功") , _T("w"), MB_OK);
}
else{
MessageBox(_T("帐号或者密码错误"), _T("错误"), MB_OK);
}
}
else{
MessageBox(_T("帐号或者密码错误"), _T("错误"), MB_OK);
}

然后再运行就没有错误了。但是脑子里还是有很多个为什么,为什么,为什么。。。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值