#pragma once
#ifndef DB_MYSQL_H
#define DB_MYSQL_H
 
#include "stdafx.h"
#include <winsock2.h>
#include "include/mysql.h"
#include <map>
 
#include <vector>
#include <iostream>
using namespace std;
typedef map<CString, CString > strMap;/*key: 字段 value: 值*/
 
class CDBMYSQL
{
public:
CDBMYSQL(CString szHost, CString szUser, CString szPassword, unsigned int port,CString szCharacter);// 构造函数
CDBMYSQL(); //构造函数 
~CDBMYSQL();//析构函数
protected:
MYSQL *m_pMYSQL; //代表一个到数据库的连接
private:
CString m_szHost; //连接的服务器
CString m_szUser; //用户名
CString m_szPassword; //连接密码
CString m_szCharacter;
unsigned int m_iPort; //连接端口
CString m_szDbName; //操作的数据库的名称
MYSQL_RES *m_pResult; //操作的结果
CString m_szQuery; //sql语句
unsigned long m_lNum; //返回查询得到的结果数
CString m_szError; //错误提示信息
unsigned int m_iDebug; //是否显示调试信息
strMap m_Info; //查询语句返回一条结果
vector<strMap>  m_vectorInfo; //查询语句可能会返回多条结果
vector<CString> m_vectorFields; //返回查询结果的列
void DisPlayError();
public:
 unsigned int DBConnect();//连接数据库
unsigned int DBSelect(CString szDB); //连接一个数据库
void SetQuery(CString szQuery); //设定查询语句
unsigned int DBQuery(); //查询数据库
strMap GetInfo(); //返回查询得到的一条结果
vector<strMap> GetArray(); //返回查询得到的结果
CString GetError(); //返回错误信息
vector<CString> GetFields();//返回查询后的列值
unsigned int InsertData(CString table,strMap *data); //向数据库中插入一条数据
unsigned long GetLastID(); //返回最后一个自动增量的值
unsigned long GetRowNum(); //返回一条sql语句影响的行数
unsigned int UpdateData(CString table,strMap *data,CString condition); //根据条件修改一条数据
unsigned int DeleteData(CString table,CString condition); //根据条件删除数据
 
};
  
#endif
 

哥修改的他人写的一套c++ 操作Mysql ado

#include "DBMYSQL.h"

CDBMYSQL::CDBMYSQL()

{

}

/*构造函数,设定连接的服务器,用户名,密码和端口*/

CDBMYSQL::CDBMYSQL(CString szHost, CString szUser, CString szPassword, unsigned int iPort=3306, CString szCharacter = "UTF8")

{

m_pMYSQL = mysql_init(NULL);

m_lNum = 0;

m_szError="";

m_szQuery="";

m_pResult = NULL;

m_szCharacter = szCharacter;

CDBMYSQL::m_szHost= szHost;

CDBMYSQL::m_szUser= szUser;

CDBMYSQL::m_szPassword= szPassword;

CDBMYSQL::m_iPort= iPort;

CDBMYSQL::m_szCharacter = szCharacter;

}

/*析构函数*/

CDBMYSQL::~CDBMYSQL()

{

if(m_pResult != NULL)

mysql_free_result(m_pResult);

m_vectorFields.clear();

m_szError = "";

m_vectorInfo.clear();

m_szDbName = "";

m_vectorInfo.clear();

mysql_close(m_pMYSQL);

}

/*连接数据库*/

unsigned int CDBMYSQL::DBConnect()

{

MYSQL *con;

if(m_pMYSQL == NULL)

{

m_szError = "初始化mysql错误";

return 1;

}

con = mysql_real_connect(m_pMYSQL, m_szHost.GetBuffer(0), m_szUser.GetBuffer(0), m_szPassword.GetBuffer(0), NULL, m_iPort,NULL,0);

if(con == NULL)

{

m_szError=mysql_error(m_pMYSQL);

return mysql_errno(m_pMYSQL);

}

mysql_set_character_set(m_pMYSQL, m_szCharacter);

return 0;

}

/*选择一个数据库*/

unsigned int CDBMYSQL::DBSelect(CString szDataBase)

{

unsigned int iRet;

if( m_pMYSQL == NULL) return 1;

m_szDbName = szDataBase;

iRet = mysql_select_db(m_pMYSQL,m_szDbName.GetBuffer(0));

if(iRet != 0)

{

m_szError += mysql_error(m_pMYSQL);

}

return iRet;

}

/*设定sql语句*/

void CDBMYSQL::SetQuery(CString szQuery)

{

ASSERT(!szQuery.IsEmpty());

if(m_pResult != NULL )

{

mysql_free_result(m_pResult);

}

m_szQuery = szQuery;

}

/*执行sql语句*/

unsigned int CDBMYSQL::DBQuery()

{

unsigned int iRet;

if( m_pMYSQL == NULL) return 1;

ASSERT(!m_szQuery.IsEmpty());

iRet = mysql_query(m_pMYSQL,m_szQuery.GetBuffer());

if(iRet == 0)

{

m_pResult = mysql_store_result(m_pMYSQL);

m_lNum = mysql_affected_rows(m_pMYSQL);

m_Info.clear();

m_vectorInfo.clear();

m_vectorFields.clear();

}

else

{

iRet = mysql_errno(m_pMYSQL);

m_szError = mysql_error(m_pMYSQL);

cout<<m_szError<<endl;

}

return iRet;

}

/*获取查询得到的一条结果*/

strMap CDBMYSQL::GetInfo()

{

MYSQL_ROW row;

unsigned int i;

ASSERT(m_pMYSQL != NULL);

if(m_Info.size() > 0) return m_Info;

if(m_pResult != NULL)

{

GetFields();

row = mysql_fetch_row(m_pResult);

if(row != NULL)

for(i=0;i<m_vectorFields.size();i++)

m_Info[m_vectorFields[i]] = (char*)row[i];

}

return m_Info;

}

/*获取查询得到的所有结果*/

vector<strMap> CDBMYSQL::GetArray()

{

MYSQL_ROW row;

unsigned int i;

strMap tmp;

ASSERT(m_pMYSQL != NULL);

if(m_vectorInfo.size() > 0) return m_vectorInfo;

if(m_pResult != NULL)

{

GetFields();

while(row = mysql_fetch_row(m_pResult))

{

if(row != NULL)

{

for(i=0;i<m_vectorFields.size();i++)

{

tmp[m_vectorFields[i]] = (char *)row[i];

}

m_vectorInfo.push_back(tmp);

}

}

}

return m_vectorInfo;

}

/*获取sql语句执行影响的行数*/

unsigned long CDBMYSQL::GetRowNum()

{

return m_lNum;

}

/*获取插入后的id号*/

unsigned long CDBMYSQL::GetLastID()

{

return mysql_insert_id(m_pMYSQL);

}

/*向数据库插入数据*/

unsigned int CDBMYSQL::InsertData(CString szTable,strMap *pData)

{

strMap::const_iterator iter;

CString szQuery;

int iFlag=0;

ASSERT(m_pMYSQL != NULL);

ASSERT(!szTable.IsEmpty());

ASSERT(pData != NULL);

for(iter = pData->begin(); iter!= pData->end(); iter++)

{

if(iFlag == 0)

{

szQuery = "insert into ";

szQuery += szTable;

szQuery += " set ";

szQuery += iter->first;

szQuery += " =  '";

szQuery += iter->second;

szQuery += "'";

iFlag++;

}

else

{

szQuery += ",";

szQuery += iter->first;

szQuery += "= '";

szQuery += iter->second;

szQuery += "'";

}

}

SetQuery(szQuery);

return DBQuery();

}

/*根据条件修改数据*/

unsigned int CDBMYSQL::UpdateData(CString szTable, strMap *pDataMap, CString szCondition)

{

strMap::const_iterator iter;

CString szQuery;

int iFlag = 0;

ASSERT(m_pMYSQL != NULL);

ASSERT(!szTable.IsEmpty());

ASSERT(pDataMap != NULL);

for(iter = pDataMap->begin(); iter!= pDataMap->end(); iter++)

{

if(iFlag == 0)

{

szQuery = " update ";

szQuery += szTable;

szQuery += " set ";

szQuery += iter->first;

szQuery += " = '";

szQuery += iter->second;

szQuery += "'";

iFlag++;

}

else

{

szQuery += ",";

szQuery += iter->first;

szQuery += "='";

szQuery += iter->second;

szQuery += "'";

}

}

if(szCondition.IsEmpty() != 0)

{

szQuery += " where ";

szQuery += szCondition;

}

SetQuery(szQuery);

return DBQuery();

}

/*根据条件删除数据*/

unsigned int CDBMYSQL::DeleteData(CString szTable, CString szCondition)

{

CString szQuery;

ASSERT(m_pMYSQL != NULL);

ASSERT(!szTable.IsEmpty());

szQuery = " delete from ";

szQuery += szTable;

if(szCondition!="")

{

szQuery += " where ";

szQuery += szCondition;

}

SetQuery(szQuery);

return DBQuery();

}

/*获取返回的错误信息*/

CString CDBMYSQL::GetError()

{

return m_szError;

}

/*返回查询后的列值*/

vector<CString> CDBMYSQL::GetFields()

{

MYSQL_FIELD *field;

ASSERT(m_pMYSQL != NULL);

if(m_vectorFields.size()>0) return m_vectorFields;

while(field = mysql_fetch_field(m_pResult))

m_vectorFields.push_back(field->name);

return m_vectorFields;

}

// 查询

CDBMYSQL *pDbMySQL = new CDBMYSQL("127.0.0.1", "root", "root", 3306, "gbk");

pDbMySQL->DBConnect();

pDbMySQL->DBSelect("demo");

pDbMySQL->SetQuery("select * from customer");

pDbMySQL->DBQuery();

vector<strMap> info = pDbMySQL->GetArray();

for (int i = 0; i < info.size(); i++)

{

TRACE("username = %s  solution =%s \r\n", info[i]["id"], info[i]["username"]);

}

strMap map;

map["username"] = "xs强";

map["company"] = "xxx投资";

pDbMySQL->UpdateData("customer",&map,"where id = 1");

map["id"] = "3";

map["username"] = "邵学成";

map["company"] = "xzxxx投资有限公司";

map["solutation"] = "先生";

map["phone"] = "136401273005";

map["mobile"] = "13640123005";

map["source"] = "同事";

map["sdate"] = "2011-11-1";

map["job"] = "程序员";

map["web"] = "71945221120";

map["email"] = "topxuh12enghua1@163.com";

map["createtime"] = "2010-11-04 21:11:59";

map["modifiedtime"] = "2010-11-04 21:11:59";

map["note"] = "一sx";

pDbMySQL->InsertData("customer",&map);

pDbMySQL->DeleteData("customer","  id=1");

c++ 操作Mysql ado的更多相关文章

  1. .NET Core 使用Dapper 操作MySQL

    MySQL官方驱动:http://www.cnblogs.com/linezero/p/5806814.html .NET Core 使用Dapper 操作MySQL 数据库, .NET Core 使 ...

  2. Code First操作Mysql数据库

    前面博客也讲了,自己做一个网站,选用的是MVC+EF Code First+MySql+EasyUI,先说下技术选型.一.为什么选择MVC? 因为之前自己做的系统大部分是webForm,MVC的之前也 ...

  3. 通过EntityFramework来操作MySQL数据库

    自己首次用到了EF,为了利人利己,故将自己今天学的记录下来. 这个项目要用到的工具是VS2015.MySQL5.7.12 . 首先我们先建一个解决方案,里面建两个项目分别是Silentdoer.Mai ...

  4. C++操作mysql方法总结(2)

    C++通过ODBC和通过MFC ODBC操作mysql的两种方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名和表数据请参考C++操作mysql方法总结(1)中的介绍 ...

  5. 使用VS2013操作MYSQL8 (ADO.NET方式 & EF6)

    今天有时间测试了一下通过.net环境操作MYSQL数据库,测试过程及结果记录如下: 1.MYSQL安装 (1)我是从MYSQL官网下载的最新版,即MYSQL8.0,在MySql官网的下载页面,找到“M ...

  6. C++操作Mysql数据库/Linux下

    本文链接:https://blog.csdn.net/Tanswer_/article/details/72796570想用C++写项目,数据库是必须的,所以这两天学了一下C++操作Mysql数据库的 ...

  7. Powershell操作MySQL

    最近再用Python写一些监控脚本,并将监控数据输出到MySQL中,最后通过Python抓取MySQL中的数据进行监控汇总告警 考虑到一些微软产品使用Powershell更为方便,于是找了些资料,尝试 ...

  8. ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)

    操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...

  9. Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy

    本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...

随机推荐

  1. 移动端click时间、touch事件、tap事件详解

    一.click 和 tap 比较 两者都会在点击时触发,但是在手机WEB端,click会有 200~300 ms,所以请用tap代替click作为点击事件. singleTap和doubleTap 分 ...

  2. [python学习篇][书籍学习][python standrad library][内建类型]迭代器类型

    我们已经知道,可以直接作用于for循环的数据类型有以下几种:一类是集合数据类型,如list.tuple.dict.set.str等:一类是generator,包括生成器和带yield的generato ...

  3. 反射+注解:excel2module

    package test.excelTest; import java.io.File; import java.io.FileInputStream; import java.lang.reflec ...

  4. bzoj 2792 [Poi2012]Well 二分+dp+two_pointer

    题目大意 给出n个正整数X1,X2,...Xn,可以进行不超过m次操作,每次操作选择一个非零的Xi,并将它减一. 最终要求存在某个k满足Xk=0,并且z=max{|Xi - Xi+1|}最小. 输出最 ...

  5. 关于Metadata Client Object Model 的一些操作

    一.查询指定的Termset及子项 <script type="text/javascript" src="/Style%20Library/aaaa/Script ...

  6. 洛谷P1372 a/b problem

    题目背景 “叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻.毕业的欣喜怎敌那离别的不舍,憧憬着未来仍毋忘逝去的歌.1000多个日夜的欢笑和泪水,全凝聚在毕业晚会上,相信,这一定 ...

  7. 学习在requirejs下如何使用underscore.js模板

    近期在学习underscore.js 这个小而美的js库,是前端 MVC 框架backbone依赖库,他的模板方法主要应用场景是ajax交互过程到页面需要大量的字符串拼接,这部分如果一旦不够仔细就很容 ...

  8. 30深入理解C指针之---字符串和数组

    一.字符串与数组 1.定义:使用字符数组表示字符串 2.特征: 1).可以直接使用字符串字面量初始化字符数组 2).声明后,赋值就只能使用字符串操作函数strcpy函数赋值 3).可以使用数组的一一赋 ...

  9. C++ 代码静态分析工具cppcheck【转】

    转自:http://blog.csdn.net/chen19870707/article/details/42393217 权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] c ...

  10. js 实现点击复制文本内容

    js  实现点击复制文本内容 <table> <tr><td>姓名:<span onclick="copyContent(this);" ...