新建一个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. Android数据库代码优化(2) - 从SQLite说起

    从SQLite说起 如果没有SQLite的基础,我们只是从Android封装的SQLite API去学习的话,难免思路会受到限制.所以,我们还是需要老老实实从头开始学习SQLite. 当我们有一身的S ...

  2. charles抓包并分析问题

    1.抓包并分析 某列表页 传入的参数: -------------------------------------------------------------------------------- ...

  3. keras 入门模型训练

    # -*- coding: utf-8 -*- from keras.models import Sequential from keras.layers import Dense from kera ...

  4. C#操作带名称空间的xml

    以前操作xml一般用下面这种方式: 好处是XDocument 能使用linq xmlPath = “path”; XDocument myXDoc = XDocument.Load(xmlPath); ...

  5. asp.net core mcroservices 架构之 分布式日志(三):集成kafka

    一 kafka介绍 kafka是基于zookeeper的一个分布式流平台,既然是流,那么大家都能猜到它的存储结构基本上就是线性的了.硬盘大家都知道读写非常的慢,那是因为在随机情况下,线性下,硬盘的读写 ...

  6. Docker从入门到安装MySQL

    Docker 的简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...

  7. HTML中id与name的用法

    可以说几乎每个做过Web开发的人都问过,到底元素的ID和Name有什么区别阿?为什么有了ID还要有Name呢? 而同样我们也可以得到最经典的答案:ID就像是一个人的身份证号码,而Name就像是他的名字 ...

  8. 分类(类别/Category)与 类扩展(Extension)

    一.分类(类别/Category) 1.适用范围      当你已经封装好了一个类(也可能是系统类.第三方库),不想在改动这个类了,可是随着程序功能的增加需要在类中增加一个方法,这时我们不必修改主类, ...

  9. test20181219 连续段的期望

    题意 连续段的期望 [问题描述] 小N最近学习了位运算,她发现2个数xor之后数的大小可能变大也可能变小,and之后都不会变大,or之后不会变小.于是她想算出以下的期望值:现在有 N个数排成一排,如果 ...

  10. 设置正确的DNS

    上网或下载软件慢问题,除去少数设备陈旧.感染病毒.网卡硬件故障和网卡驱动错误方面的因素,绝大部分原因是由于部分上网电脑或家用无线路由器设置了错误的DNS造成的,正确的方法是应该在电脑或路由器上使用本地 ...