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)的更多相关文章

  1. C++操作mysql方法总结(3)

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

  2. 转:C++操作mysql方法总结(1)

    原文:http://www.cnblogs.com/joeblackzqq/p/4332945.html C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作m ...

  3. C++操作mysql方法总结(1)

    C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作mysql的两种方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名为boo ...

  4. [mysql] C++操作mysql方法总结(1)

    From: http://www.cnblogs.com/magicsoar/p/3817518.html C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作 ...

  5. [mysql] C++操作mysql方法

    下载:http://mirrors.sohu.com/mysql/MySQL-5.5/ From: http://www.cnblogs.com/magicsoar/p/3817518.html C+ ...

  6. python操作mysql方法和常见问题

    http://www.cnblogs.com/ma6174/archive/2013/02/21/2920126.html 安装mysql模块 sudo easy_install mysql-pyth ...

  7. Shell脚本中执行sql语句操作mysql的5种方法【转】

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

  8. nodejs mysql 操作数据库方法二

    node.js 开发指南 – Node.js 连接 MySQL 并进行数据库操作 通常在NodeJS开发中我们经常涉及到操作数据库,尤其是 MySQL ,作为应用最为广泛的开源数据库则成为我们的首选, ...

  9. python操作mysql代码讲解(及其实用,未来测试工作主要操作数据库的方法)

    pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 下载安装 1 pip3 install pymysql 使用操作 1.执行SQL 1 2 3 4 ...

随机推荐

  1. 对Dataguard的三种模式的理解

    模式1:最大可保护模式: 必须同步. 模式2:最大可用性模式: 能同步就同步,不能同步就不同步. 模式3:最大性能模式: 异步模式.

  2. 洛谷 P2563 [AHOI2001]质数和分解

    洛谷  P2563 [AHOI2001]质数和分解 题目描述 任何大于 1 的自然数 n 都可以写成若干个大于等于 2 且小于等于 n 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能 ...

  3. idea web项目debug模式实时更新按钮不生效原因

    必须两个都开启才能生效,单按按钮不能生效,但是有时候自动更新不生效的时候按按钮后可以生效, 如果前端目录或后端内容实在不更新,就删掉out目录和target目录,重新启动服务器即可

  4. 换新 IP 地址的时候,ORCL前置准备条件

    1. 开启虚拟机 ORCL 服务 2.   cmd > ipconfig > 3.   cmd > lsnrctl status > 4.  主机改配置文件 IP,succes ...

  5. Permission Policies

    The Permission Policy determines Security System behavior when there are no explicitly specified per ...

  6. JAVA使用qrcode生成二维码(带logo/不带logo)

    /** * */ package qrcode; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; i ...

  7. Frida----基本代码

    代码来自官网:https://www.frida.re/docs/examples/android/ import frida, sys def on_message(message, data): ...

  8. Jmeter接口测试(五)变量及参数化

    在请求过程中,有时我们需要在请求中设置一些变量来测试不同的场景. 提示:在调试请求过程中,无关的请求可以暂时禁用掉,选择某个暂时不用的请求,右键--禁用 Jmeter 支持以下类型变量:所有类型的变量 ...

  9. POSTMAN接口测试get和post

    GET 1.在URL栏里输入想要访问的IP,并点击旁边的Params,对具体要查询的内容进行复制,百度对要查询的字段的key是wd 这里将参数值的勾选取消掉可以看到URL内容的变化,查询字段消失 2. ...

  10. (转)CentOS7系统信息及运行情况查看

    原文链接:https://blog.csdn.net/qq_42196196/article/details/85063911 系统信息 CPU信息 内存信息 显卡信息 硬盘信息 网络信息 用户信息 ...