数据库与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 ...
随机推荐
- Leetcode 1020. Number of Enclaves
dfs或者bfs class Solution: def dfs(self, A, rows, cols, i, j): if not (0 <= i < rows and 0 <= ...
- 【MFC】SetWindowPos函数使用详解
摘自: http://wenku.baidu.com/link?url=hYKs20rYA13TTdMl9gJ378GNOsxH1DPZPkYZVEIcipATlVBMLzjWdpd2-29fm-tq ...
- hadoop1.x和2.x的一些主要区别
当我们安装完毕hadoop2的时候,我们看到为啥没有jobtracker,这是因为hadoop2中已经没有jobtracer了,而是产生了yarn,yarn是什么那,可以看yarn详解,我们为什么已经 ...
- COGS 2638. 数列操作ψ 线段树
传送门 : COGS 2638. 数列操作ψ 线段树 这道题让我们维护区间最大值,以及维护区间and,or一个数 我们考虑用线段树进行维护,这时候我们就要用到吉司机线段树啦 QAQ 由于发现若干次an ...
- datetimefield和datefield的区别
django创建关于时间的model时,有三个可选,datetimefield.datefield和timefield,这三个分别对应datetime.date.time对象,这三个对象都有共同的属性 ...
- OpenWRT mt7620n 系统升级引起的问题
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qianguozheng/article/details/27237175 OpenWRT系统升级採用 ...
- 在idea下两个项目之间的maven父子级项目依赖
配置:idea 在一个项目中的父子级依赖网上轮子太多,我就不重复造了,留个链接 http://www.cnblogs.com/tibit/p/6185704.html 说说一些我自己注意的问题,在pr ...
- android多渠道打包牛B工具
http://www.orchidshell.com/ 兰贝壳儿:一个Eclipse插件,为Android开发提供了多渠道打包功能和一些工具类.
- Note: log switch off, only log_main and log_events will have logs!
真机(华为c8813)在Eclipase上测试,打不出logcat信息,只有这样的一句话:Note: log switch off, only log_main and log_events will ...
- tomcat部署war包启动后请求无响应,一直报404
刚刚碰到一个坑,本地Eclipse启动了tomcat,调用接口就是404,一直怀疑是url问题,改来改去还是404.最后发现还真是url问题,问题不在接口路径,而是项目名.因为接口路径用的是RESTf ...