数据库与vs的连接
新建一个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的连接的更多相关文章
- web/jdbc数据库带实例名连接2008
--------------------------数据库带实例名连接2008-------------------------------------<property name=" ...
- 【转】mysql数据库中实现内连接、左连接、右连接
[转]mysql数据库中实现内连接.左连接.右连接 内连接:把两个表中数据对应的数据查出来 外连接:以某个表为基础把对应数据查出来 首先创建数据库中的表,数据库代码如下: /* Navicat MyS ...
- 关闭数据库下的所有连接操作 sql存储过程
use master go )) as begin ),) declare @spid int set @sql='declare getspid cursor for select spid fro ...
- web.config中配置数据库(多数据)连接的两种方式
这是我的第一篇文章,既然是第一篇了,那就从最基础的只是说起--web.config中配置数据库连接. 网上有很多这方面的资料,但发现并没有一篇从头到位很清楚明了说完的,今天就把我的整理写在这里吧. 在 ...
- JDBC连接各种数据库的方法,连接MySql,Oracle数据库
JDBC连接各种数据库的方法: JDBC编程步骤: 1.导入jar包 2.注册驱动 3.获取数据库连接对象 4.定义SQL语句 5.获得执行SQL语句对象statemnet 6.执行SQL语句 7.处 ...
- Java连接Oracle数据库的三种连接方式
背景: 这两天在学习Oracle数据库,这里就总结下自己上课所学的知识,同时记录下来,方便整理当天所学下的知识,也同时方便日后自己查询. SQL语句的话,这里我就不多讲了,感觉和其他的数据库(MySQ ...
- ORA-12519, TNS:no appropriate service handler found(数据库上当前的连接数目已经超过最大值)
报错: ORA-12519, TNS:no appropriate service handler foundThe Connection descriptor used by the client ...
- Robomongo 0.9.0 连接mongo数据库时,提示连接失败 的解决方案
Robomongo 0.9.0 连接mongo数据库时,提示连接失败.(IP和端口号确定是对的) 基本注意点: 1.mongodb服务打开,打开时,指定端口号,默认为27017,使用默认值,则不用指定 ...
- PHP 数据库 ODBC创建 ODBC 连接
PHP 数据库 ODBC ODBC 是一种应用程序编程接口(Application Programming Interface,API),使我们有能力连接到某个数据源(比如一个 MS Access 数 ...
- (十一) 数据库查询处理之连接(Join)
(十一) 数据库查询处理之连接(Join) 1. 连接操作的一个例子 把外层关系和内层关系中满足一定关系的属性值拼接成一个新的元组 一种现在仍然十分有用的优化思路Late Materializatio ...
随机推荐
- 激活函数之ReLU/softplus介绍及C++实现
softplus函数(softplus function):ζ(x)=ln(1+exp(x)). softplus函数可以用来产生正态分布的β和σ参数,因为它的范围是(0,∞).当处理包含sigmoi ...
- Android 框架学习1:EventBus 3.0 的特点与如何使用
前面总结了几篇基础,在这过程中看着别人分享自定义 View.架构或者源码分析,看起来比我写的"高大上"多了,内心也有点小波动. 但是自己的水平自己清楚,基础不扎实画再多源码流程图也 ...
- 从无到有开发自己的Wordpress博客主题---代码环境准备
注意这里说的是代码环境准备哦,而不是L(M)AMP运行环境哦,运行环境会在后述文章中在写. 一.在本地初始化git环境并且链接上gitee 1.在gitee上创建一个项目托管你的代码 这个不在赘述,按 ...
- 2017年--10年java大神告诉你开发最常用的百分之二十的技术有哪些?
首先题主说的20%我不知道从哪方面去理解.接下来我会将自己多年来工作中会经常使用到的技术列出来. 1.html.css 2.java工作原理(jvm) 3.java语法.数据结构和算法 4.java语 ...
- 前端之JavaScript 02
一.函数 // 最基础的函数定义 function f1() { console.log('hello world!'); } f1(); // hello world! // 带参数的函数 func ...
- Linux字符界面访问U盘
首先查看U盘所在位置 fdisk -l 只需查看最后分区情况,例如找到U盘的位置为:/dev/sda1(视系统而定) 创建文件夹(用于挂载U盘内容) mkdir /mnt/usb 挂载 mount / ...
- css3单冒号和双冒号的区别
css3中对于伪元素的使用,在项目开发中使用得当将会对代码的可读性又很大的提升.但是对于伪类大家或许都知道是一些选择器的使用,这里总结了关于伪元素中单冒号和双冒号的区别: 再官方定义中规定单冒号都为伪 ...
- phpcms URL修改
修改caches\configs\system.php中'html_root' => 'html',//生成静态文件路径改成'html_root' => '',//生成静态文件路径,然后修 ...
- HiHoCoder1156 彩色的树(树值的记忆化ORZ+map强势出场)
1156 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, 2, …, n.树中有n - 1条边,任意两个节点间恰好有一条 ...
- DataTable / DataSet 与 xml 的相互转换
之前做DataTable和DataSet转xml一直使用XmlSerializer 序列化完成.今天发现新方法,哇咔咔方便了很多.还不用担心Name为空时报错 static void Main(str ...