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

封装一个MySQL类

CMysql.h

#pragma once
#include <mysql.h> //#include <WinSock2.h>
#pragma comment(lib,"libmysql.lib")
//
#include <list>
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<string>& 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, , NULL, CLIENT_MULTI_STATEMENTS))
{
//连接错误
return false;
} return true;
} bool CMySql::SelectMySql(char* szSql,int nColumn,list<string>& 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 = ;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[] = {};
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[] = {};
list<string> lststr;
string password;
sprintf_s(sz,"select password from user where username = '%s'",m_edituser);
if(theApp.m_mysql.SelectMySql(sz,,lststr))
{
password = lststr.front();
lststr.pop_front();
if(strcmp(password.c_str(),m_editpsw) == )
{
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()

数据库与vs的连接的更多相关文章

  1. web/jdbc数据库带实例名连接2008

    --------------------------数据库带实例名连接2008-------------------------------------<property name=" ...

  2. 【转】mysql数据库中实现内连接、左连接、右连接

    [转]mysql数据库中实现内连接.左连接.右连接 内连接:把两个表中数据对应的数据查出来 外连接:以某个表为基础把对应数据查出来 首先创建数据库中的表,数据库代码如下: /* Navicat MyS ...

  3. 关闭数据库下的所有连接操作 sql存储过程

    use master go )) as begin ),) declare @spid int set @sql='declare getspid cursor for select spid fro ...

  4. web.config中配置数据库(多数据)连接的两种方式

    这是我的第一篇文章,既然是第一篇了,那就从最基础的只是说起--web.config中配置数据库连接. 网上有很多这方面的资料,但发现并没有一篇从头到位很清楚明了说完的,今天就把我的整理写在这里吧. 在 ...

  5. JDBC连接各种数据库的方法,连接MySql,Oracle数据库

    JDBC连接各种数据库的方法: JDBC编程步骤: 1.导入jar包 2.注册驱动 3.获取数据库连接对象 4.定义SQL语句 5.获得执行SQL语句对象statemnet 6.执行SQL语句 7.处 ...

  6. Java连接Oracle数据库的三种连接方式

    背景: 这两天在学习Oracle数据库,这里就总结下自己上课所学的知识,同时记录下来,方便整理当天所学下的知识,也同时方便日后自己查询. SQL语句的话,这里我就不多讲了,感觉和其他的数据库(MySQ ...

  7. ORA-12519, TNS:no appropriate service handler found(数据库上当前的连接数目已经超过最大值)

    报错: ORA-12519, TNS:no appropriate service handler foundThe Connection descriptor used by the client ...

  8. Robomongo 0.9.0 连接mongo数据库时,提示连接失败 的解决方案

    Robomongo 0.9.0 连接mongo数据库时,提示连接失败.(IP和端口号确定是对的) 基本注意点: 1.mongodb服务打开,打开时,指定端口号,默认为27017,使用默认值,则不用指定 ...

  9. PHP 数据库 ODBC创建 ODBC 连接

    PHP 数据库 ODBC ODBC 是一种应用程序编程接口(Application Programming Interface,API),使我们有能力连接到某个数据源(比如一个 MS Access 数 ...

  10. (十一) 数据库查询处理之连接(Join)

    (十一) 数据库查询处理之连接(Join) 1. 连接操作的一个例子 把外层关系和内层关系中满足一定关系的属性值拼接成一个新的元组 一种现在仍然十分有用的优化思路Late Materializatio ...

随机推荐

  1. Webpack 热部署检测不到文件变化问题

    Webpack 热部署检测不到文件变化问题 今天在用Webpack开发的时候,突然发现文件变动后热部署功能不工作了,感觉好像是webpack检测不到文件的修改了.折腾了半天,开始一直以为是自己的代码有 ...

  2. Nodejs 实用工具集笔记

    前言 工具列表 supervisor 安装 使用 node-inspector 安装 使用 SuperAgent 安装 使用 教程 cheerio 安装 使用 教程 总结 前言 学了Nodejs一天了 ...

  3. 目标跟踪之ECO:Efficient Convolution Operators for Tracking

    一. 相关滤波算法总结 作者首先分析了 影响相关滤波算法效率 和 导致过拟合 的几个原因: 1)Model Size (模型大小) 包括两个方面: - 模型层数,对应多分辨率 Sample,比如多层 ...

  4. markdown 语法汇总

    Markdown是什么? Markdown是一种轻量级标记语言,它以纯文本形式(_易读.易写.易更改_)编写文档,并最终以HTML格式发布. Markdown也可以理解为将以MARKDOWN语言编写的 ...

  5. ORM版,学生管理系统03

    关于老师信息管理 建立多对多关系 第一种(通过外键建立) 自己写类,自己使其建立关系 缺点: 不能用Django ORM 多对多操作的语法 class Teacher(models.Model): t ...

  6. JavaScript例子

    模态框(JavaScript) <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  7. 进程(并发,并行) join start 进程池 (同步异步)

    一.背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象.进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有 ...

  8. vim编辑器安装命令使用命令和设置的使用总结

    vim编辑器的安装 vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率.本文讲解主要是在Cento ...

  9. HihoCoder1620: 股票价格3 (单调队列 or DP)

    股票价格3 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在关注股票,为了计算股票可能的盈利,他获取了一只股票最近N天的价格A1~AN. 小Hi想知道,对于第 ...

  10. Python面对对象相关知识总结

    很有一段时间没使用python了,前两天研究微信公众号使用了下python的django服务,感觉好多知识都遗忘了,毕竟之前没有深入的实践,长期不使用就忘得快.本博的主要目的就是对Python中我认为 ...