博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库与vs的连接
阅读量:6924 次
发布时间:2019-06-27

本文共 3444 字,大约阅读时间需要 11 分钟。

新建一个MFC基于对话框的项目后,更改属性,  其中需要将include(里面都是MySQL的头文件)lib是库文件,将.dll放入与.exe同级目录下,或放入系统里(c:\windows\system32)

封装一个MySQL类

CMysql.h

#pragma once#include 
//#include
#pragma comment(lib,"libmysql.lib")//#include
using namespace std;class CMySql{public: CMySql(void); ~CMySql(void);public: bool ConnectMySql(char *host,char *user,char *pass,char *db); void DisConnect(); bool SelectMySql(char* szSql,int nColumn,list
& lstStr); //更新:删除、插入、修改 bool UpdateMySql(char* szSql); private: MYSQL *sock; MYSQL_RES *results; MYSQL_ROW record; };

CMysql.cpp

#include "stdafx.h"#include "CMySql.h"CMySql::CMySql(void){    /*这个函数用来分配或者初始化一个MYSQL对象,用于连接mysql服务端。    如果你传入的参数是NULL指针,它将自动为你分配一个MYSQL对象,    如果这个MYSQL对象是它自动分配的,那么在调用mysql_close的时候,会释放这个对象*/    sock = new MYSQL;    mysql_init(sock );      mysql_set_character_set(sock,"gb2312"); //gb2312 中华人民共和国简体字标准}CMySql::~CMySql(void){    if(sock)    {        delete sock;        sock = NULL;    }    }void CMySql::DisConnect(){    mysql_close(sock);}bool CMySql::ConnectMySql(char *host,char *user,char *pass,char *db){       if (!mysql_real_connect(sock, host, user, pass, db, 0, NULL, CLIENT_MULTI_STATEMENTS))    {        //连接错误        return false;    }        return true;}bool CMySql::SelectMySql(char* szSql,int nColumn,list
& lstStr){ //mysql_query() 函数用于向 MySQL 发送并执行 SQL 语句 if(mysql_query(sock,szSql))return false; /*·mysql_store_result 对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等) 返回值: . CR_COMMANDS_OUT_OF_SYNC   以不恰当的顺序执行了命令。   · CR_OUT_OF_MEMORY   内存溢出。   · CR_SERVER_GONE_ERROR   MySQL服务器不可用。   · CR_SERVER_LOST   在查询过程中,与服务器的连接丢失。   · CR_UNKNOWN_ERROR   出现未知错误。*/ results=mysql_store_result(sock); if(NULL == results)return false; while (record = mysql_fetch_row(results)) { for(int i = 0;i < nColumn;i++) { lstStr.push_back(record[i]); } } return true;} bool CMySql::UpdateMySql(char* szSql) { if(!szSql)return false; if(mysql_query(sock,szSql))return false; return true; }

 

注册按钮实现函数:

void CMysqlDlg::OnBnClickedButton1(){    // TODO: 在此添加控件通知处理程序代码    UpdateData();    char sz[100] = {
0}; sprintf_s(sz,"insert user values ('%s','%s')",m_edituser,m_editpsw); if(theApp.m_mysql.UpdateMySql(sz)) { MessageBox(_T("注册成功")); } else MessageBox(_T("注册失败"));}

登陆按钮实现函数:

void CMysqlDlg::OnBnClickedButton2(){    // TODO: 在此添加控件通知处理程序代码    UpdateData();    char sz[100] = {
0}; list
lststr; string password; sprintf_s(sz,"select password from user where username = '%s'",m_edituser); if(theApp.m_mysql.SelectMySql(sz,1,lststr)) { password = lststr.front(); lststr.pop_front(); if(strcmp(password.c_str(),m_editpsw) == 0) { MessageBox("登陆成功");        CMysqlDlg::OnOK();

        MyDlg mydlg;

        theApp.m_pMainWnd = &mydlg;
        mydlg.DoModal();

}        else        {            MessageBox("登陆失败");        }    }}

OnOK是关闭窗口函数;

 

更新按钮的实现

void MyDlg::OnBnClickedButton1(){    UpdateData();    // TODO: 在此添加控件通知处理程序代码    if(theApp.m_mysql.UpdateMySql(m_editstr.GetBuffer()))    {        MessageBox("登陆成功");        }}

其中需要注意的:CString 转成 char*类型的函数GetBuffer()

String 的内部是用char* 来封装的,装成char*的函数是c_str()

 

转载于:https://www.cnblogs.com/Lune-Qiu/p/8675731.html

你可能感兴趣的文章
Jvm(25),回收策略----前三种基本回收算法对比
查看>>
Jmeter时间函数工具(参考)
查看>>
Ubuntu16.04下源码安装go1.11.2编译器
查看>>
Js添加、读取、删除cookie,判断cookie是否有效,指定domain域下主路径path下设置cookie,设置expires过期时间...
查看>>
Android MVC模式和MVP模式的区别
查看>>
从应用到内核查接口超时(上)
查看>>
淘宝频繁访问会出现滑动验证码
查看>>
SQL 正则表达式 `(user_log_acct)?+.+`
查看>>
MVC为用户创建专属文件夹
查看>>
protobuf
查看>>
SecureCRT自动登陆到服务器的脚本以及脚本编写简单说明
查看>>
网格交易法:数学+传统智慧战胜华尔街
查看>>
《C#本质论(第4版)》
查看>>
BZOJ 1237 配对(DP)
查看>>
MySQL慢查询日志释疑总结
查看>>
IBM高级工程师,谷歌等国际知名公司工程师撰写Android开发教程合集 ZT
查看>>
[转]MVVM框架和误区
查看>>
win32 sdk树形控件的项拖拽实现
查看>>
Android——黑名单管理
查看>>
提示29. 怎样避免延迟加载或Load()阅读器问题
查看>>