C++操作mysql方法总结(2)
C++通过ODBC和通过MFC ODBC操作mysql的两种方式
使用vs2013和64位的msql 5.6.16进行操作

项目中使用的数据库名和表数据请参考C++操作mysql方法总结(1)中的介绍
既然使用到了ODBC那么就要需要添加数据源了
控制面板->管理工具->数据源->用户DSN->添加

填写相关的数据库连接配置和使用的数据库,可点击Test进行测试,查看是否成功连接,设置完成后点击OK
其中Data Source Name即MySqlODBC我们会在连接数据库时用到

至此,数据源添加完毕
一、通过ODBC进行操作
开放数据库互连(Open Database Connectivity,ODBC)是微软提供的一组用于数据库访问的规范接口,多数数据库都提供了ODBC驱动
1、新建一个空项目
2、如果使用的mysql是64位的,需要将项目的解决方案平台由win32改成x64

至此,相关配置全部完成
程序代码
main.cpp
#include <Windows.h>
#include <iostream>
#include <iomanip>
#include <sql.h>
#include <odbcss.h>
#include <sqlext.h>
#define MAXBUFLEN 255
#define MaxNameLen 20 #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") SQLHENV henv = SQL_NULL_HENV;//定义环境句柄
SQLHDBC hdbc1 = SQL_NULL_HDBC;//定义数据库连接句柄
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;//定义语句句柄 using namespace std;
int main()
{
RETCODE retcode;//错误返回码
retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
if (retcode < )//错误处理
{
cout << "allocate ODBC Environment handle errors." << endl;
return -;
}
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,
(SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
if (retcode < ) //错误处理
{
cout << "the ODBC is not version3.0 " << endl;
return -;
}
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
if (retcode < ) //错误处理
{
cout << "allocate ODBC connection handle errors." << endl;
return -;
} char* szDSN = "MySqlODBC";//添加数据源时,为其起的名字
char* szUID = "root";
char* szAuthStr = ""; retcode = SQLConnect(hdbc1,
(SQLCHAR*)szDSN,
(SWORD)strlen(szDSN),
(SQLCHAR*)szUID,
(SWORD)strlen(szUID),
(SQLCHAR*)
szAuthStr,
(SWORD)strlen(szAuthStr)); if (retcode < ) //错误处理
{
cout << "connect to ODBC datasource errors." << endl;
return -;
} retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
if (retcode < )
{
cout << "allocate ODBC statement handle errors." << endl;
return -;
}
retcode = SQLExecDirect(hstmt1, (SQLCHAR*)"SElECT * FROM book", SQL_NTS);
if (retcode < )
{
cout << "Executing statement throught ODBC errors." << endl;
return -;
}
SQLCHAR bookname[MaxNameLen + ];
SQLCHAR size[MaxNameLen + ];
SQLLEN columnLen = ; retcode = SQLBindCol(hstmt1, , SQL_C_CHAR, bookname, MaxNameLen, &columnLen);
retcode = SQLBindCol(hstmt1, , SQL_C_CHAR, size, MaxNameLen, &columnLen);
while ((retcode = SQLFetch(hstmt1)) != SQL_NO_DATA)
{
cout <<setw() <<"BookName:" << bookname << endl;
cout << setw() << "Size:" << size << endl;
}
system("pause");
}
运行结果

一、通过MFC ODBC进行操作
MFC提供了对ODBC进行了封装,使得利用MFC创建ODBC的应用程序变得简单
1、新建一个win32的控制台应用程序
2、进行以下修改
MFC的使用:在共享DLL中使用MFC
字符集:使用Unicode字符集

3、如果使用的mysql是64位的,需要将项目的解决方案平台由win32改成x64

至此,相关配置全部完成
程序代码
main.cpp
#include "stdafx.h"
#include "afxdb.h"
#include <iostream>
#include <iomanip>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
CDatabase db; if (!db.IsOpen())//判断数据库是否已经被打开
{ BOOL bflag= db.Open(NULL, FALSE, FALSE, _T("ODBC;DSN=MySqlODBC;UID=root;PWD=123456"));
if (!bflag)
{
cout << "ERROR" << endl;
}
} CRecordset rs(&db);
CString str;
str.Format(L"select * from book");
try
{
rs.Open(CRecordset::forwardOnly, (L"%s", str));
short nFields = rs.GetODBCFieldCount();
while (!rs.IsEOF())
{ CDBVariant varValue;
rs.GetFieldValue(L"bookname", varValue);
cout << setw() << "BookName:" << *varValue.m_pstringA << endl;
rs.GetFieldValue(L"size", varValue);
cout << setw() << "Size:" << *varValue.m_pstringA << endl;
rs.MoveNext();
}
}
catch (...)
{
cout << "ERRPR" << endl;
} db.Close();
system("pause");
}
运行结果

C++操作mysql方法总结(2)的更多相关文章
- C++操作mysql方法总结(3)
C++通过mysql++操作mysql的方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名和表数据请参考C++操作mysql方法总结(1)中的介绍 Mysql ...
- 转:C++操作mysql方法总结(1)
原文:http://www.cnblogs.com/joeblackzqq/p/4332945.html C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作m ...
- C++操作mysql方法总结(1)
C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作mysql的两种方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名为boo ...
- [mysql] C++操作mysql方法总结(1)
From: http://www.cnblogs.com/magicsoar/p/3817518.html C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作 ...
- [mysql] C++操作mysql方法
下载:http://mirrors.sohu.com/mysql/MySQL-5.5/ From: http://www.cnblogs.com/magicsoar/p/3817518.html C+ ...
- python操作mysql方法和常见问题
http://www.cnblogs.com/ma6174/archive/2013/02/21/2920126.html 安装mysql模块 sudo easy_install mysql-pyth ...
- Shell脚本中执行sql语句操作mysql的5种方法【转】
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
- nodejs mysql 操作数据库方法二
node.js 开发指南 – Node.js 连接 MySQL 并进行数据库操作 通常在NodeJS开发中我们经常涉及到操作数据库,尤其是 MySQL ,作为应用最为广泛的开源数据库则成为我们的首选, ...
- python操作mysql代码讲解(及其实用,未来测试工作主要操作数据库的方法)
pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 下载安装 1 pip3 install pymysql 使用操作 1.执行SQL 1 2 3 4 ...
随机推荐
- R语言学习笔记(二十一):字符串处理中的元字符(代码展示)
元字符有自己的特殊含义 [ ]内的任意字符将被匹配 grep(pattern = "[wW]", x = states, value = T) grep(pattern = &qu ...
- 基于Verilog的CRC-CCITT校验
由于笔者在自己设计CRC模块时遇到很多问题,在网上并未找到一篇具有实际指导意义的文章,在经过多次仿真修改再仿真之后得到了正确的结果,故愿意在本文中为大家提供整个设计流程供大家快速完成设计.本文章主要针 ...
- mysql存储过程批量插入数据
DROP TABLE IF EXISTS TeachersInfo; CREATE TABLE TeachersInfo ( id INT NOT NULL AUTO_INCREMENT, teach ...
- 1、算法介绍,lowB三人组,快速排序
1.什么是算法 2.递归 # 一直递归,递归完成再打印 def func4(x): if x > 0: func4(x - 1) print(x) func4(5) 3.时间 复杂度 (1)引入 ...
- 常见面试算法题JS实现-仅用递归函数和栈操作逆序一个栈
前言: 因为JAVA和JS语言特性的不同,有些东西在JAVA中可能需要一些技巧和手段才能实现的复杂程序,但是在JS中可能就是天然存在的,所以这套书里面的题目不会全部用JS去实现一遍,因为可能JS的实现 ...
- python 中的特殊方法,纠正自己笨笨的记忆
1. __new__ 和 __init__ 的区别 python 2.x 老式类(默认继承type) class A: pass 老式类中没有__new__类方法(也就是说定义也不会执行,它不是老式类 ...
- spring-boot2.x Application properties属性配置
# =================================================================== # COMMON SPRING BOOT PROPERTIE ...
- NO--19 微信小程序之scroll-view选项卡与跳转(二)
本篇为大家介绍为何我们在最后做交互的时候,并没有使用上一篇讲的选项卡的效果. scroll-view与跳转.gif (如无法查看图片,还请翻看上一篇!) 大家注意看,在我点击跳转后,首先能看到的是 ...
- 腾讯hr面
腾讯hr面面经 20181018 寒暄几句 hr自我介绍 hr介绍面试和最后出结果的时间周期 进入主题 自我介绍 考研成绩专业第一 聊考研(考研的经过.考研和保研) 本科成绩 考研成绩超长发挥还是正常 ...
- 可道云kodexplorer搭建私有云后的配置优化
一.上传下载速度优化首先明确可道云没有对上传下载做任何限制,速度快慢和网络环境有关.可道云是基于http上传,所以和其他http上传速度基本一致:可以对比其他web系统或网站说附件上传速度.同其他例如 ...