一、ADO连接mysql

1、安装mysql-5.5.20-win32.msi和mysql-connector-odbc-5.3.4-win32.msi(一般两个安装程序要匹配,否则可能连接不上)
    然后:开始菜单->设置->控制面板->管理工具->数据源(ODBC)->系统DSN->添加->选择MySQL ODBC 5.3.4 Driver(下图是从百度经验拷贝过来,只供参考,mysql odbc版本不一定相同)。

弹出建立连接的对话框,每一项的意思图中都给出了,用户名和密码就是你的mysql安装是填的用户名和密码

填完后测试,如果没成功,可能是你的用户名或密码错误,如果用户名和密码确定是正确的,则看看mysql服务是否开启

2、首先导入ADO类型库,您的环境中msado15.dll不一定在这个目录下,请按实际情况修改。或者把msado15.dll这个文件拷贝到你的工程目录下,直接#import "msado15.dll" \ no_namespace \rename ("EOF", "adoEOF")包含进来。
在stdafx.h加入如下代码:

#include <afxdb.h>        // MFC Automation classes
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
 
创建Connection对象并连接数据库
int CDBConnect::Open(LPCTSTR strDstAddress, LPCTSTR strUsername, LPCTSTR strPassword, LPCTSTR strDBName)
{
if(m_bDBOpen)
{
return 0;
} HRESULT hr = m_pConn.CreateInstance(__uuidof(Connection)); if (FAILED(hr))
{
return -1;
} WCHAR wszSQL[SQL_BUFFER_LEN] = {0};
memset(wszSQL, 0, SQL_BUFFER_LEN);
//DSN是数据源,server是本地或者远程数据库地址,用户名,密码,数据库名
wsprintf(wszSQL,L"DSN=mysql;server=%s;User ID=%s;Password=%s;DATABASE=%s;",strDstAddress,strUsername,strPassword,strDBName); try
{
//// 连接到服务器上数据库
//hr=m_pConn->Open("DSN=mysql;server=localhost;DATABASE=ctl_pnl_effect", "root", "xoxzhxtp",adModeUnknown) ; hr=m_pConn->Open(wszSQL, "", "",adModeUnknown) ;
if (FAILED(hr))
return -1;
}
catch (_com_error &err)
{
DWORD dw = GetLastError();
printf( "数据库操作失败! 错误信息:%s, 文件:%s, 行:%d./n", err.ErrorMessage(), __FILE__, __LINE__);
m_pConn.Release();
return -1;
} m_bDBOpen = true; return 0;
}

  

 
二、MySQL自己的API连接mysql数据库

1、使用API的方式连接,需要加载mysql的头文件和lib文件。

在VS2010的附加包含目录中添加\MySQL\MySQL Server 5.5\include。在安装MySql的目录下找。 把libmysql.dll和libmysql.lib文件拷贝到所建的工程目录下。然后在头文件里包含以下内容:

//mysql所需的头文件和库文件
#include "winsock.h"
#include "mysql.h"
#pragma comment(lib,"libmySQL.lib")

  

2、进行编码

(1)连接mysql数据库

头文件里定义数据源指针 MYSQL m_sqlCon;

{
m_res = NULL;
m_conv_res = NULL;
m_mysql = new MYSQL;
if (NULL == mysql_init(m_mysql))
{
OutputDebugStringA("MYSQL>>>create db connect failed\n");
}
else
{
//设置字符集
mysql_options(m_mysql, MYSQL_SET_CHARSET_NAME, "gb2312");
//自动重连
my_bool my_true=true;
mysql_options(m_mysql, MYSQL_OPT_RECONNECT, &my_true);
if (NULL == mysql_real_connect(m_mysql, szHost,szDBUserName, szDBPwd, szDefDB, unDBPort, NULL, CLIENT_MULTI_STATEMENTS))
{
char szTemp[] = {};
sprintf_s(szTemp,,"MYSQL>>>connect failed (%s)\n",mysql_error(m_mysql)); printf("%s", szTemp);
mysql_close(m_mysql);
if (m_mysql)
{
delete m_mysql;
m_mysql = NULL;
} m_bConnectSuccess = false;
return;
}
else{
m_bConnectSuccess = true;
printf("MYSQL>>>connect success,and set Chinaese Char\n");
}
}
}

附MySQL的API接口:

mysql_affected_rows() 返回被最新的UPDATE, DELETE或INSERT查询影响的行数。 
mysql_close() 关闭一个服务器连接。 
mysql_connect() 连接一个MySQL服务器。该函数不推荐;使用mysql_real_connect()代替。 
mysql_change_user() 改变在一个打开的连接上的用户和数据库。 
mysql_create_db() 创建一个数据库。该函数不推荐;而使用SQL命令CREATE DATABASE。 
mysql_data_seek() 在一个查询结果集合中搜寻一任意行。 
mysql_debug() 用给定字符串做一个DBUG_PUSH。 
mysql_drop_db() 抛弃一个数据库。该函数不推荐;而使用SQL命令DROP DATABASE。 
mysql_dump_debug_info() 让服务器将调试信息写入日志文件。 
mysql_eof() 确定是否已经读到一个结果集合的最后一行。这功能被反对; mysql_errno()或mysql_error()可以相反被使用。 
mysql_errno() 返回最近被调用的MySQL函数的出错编号。 
mysql_error() 返回最近被调用的MySQL函数的出错消息。 
mysql_escape_string() 用在SQL语句中的字符串的转义特殊字符。 
mysql_fetch_field() 返回下一个表字段的类型。 
mysql_fetch_field_direct () 返回一个表字段的类型,给出一个字段编号。 
mysql_fetch_fields() 返回一个所有字段结构的数组。 
mysql_fetch_lengths() 返回当前行中所有列的长度。 
mysql_fetch_row() 从结果集合中取得下一行。 
mysql_field_seek() 把列光标放在一个指定的列上。 
mysql_field_count() 返回最近查询的结果列的数量。 
mysql_field_tell() 返回用于最后一个mysql_fetch_field()的字段光标的位置。 
mysql_free_result() 释放一个结果集合使用的内存。 
mysql_get_client_info() 返回客户版本信息。 
mysql_get_host_info() 返回一个描述连接的字符串。 
mysql_get_proto_info() 返回连接使用的协议版本。 
mysql_get_server_info() 返回服务器版本号。 
mysql_info() 返回关于最近执行得查询的信息。 
mysql_init() 获得或初始化一个MYSQL结构。 
mysql_insert_id() 返回有前一个查询为一个AUTO_INCREMENT列生成的ID。 
mysql_kill() 杀死一个给定的线程。 
mysql_list_dbs() 返回匹配一个简单的正则表达式的数据库名。 
mysql_list_fields() 返回匹配一个简单的正则表达式的列名。 
mysql_list_processes() 返回当前服务器线程的一张表。 
mysql_list_tables() 返回匹配一个简单的正则表达式的表名。 
mysql_num_fields() 返回一个结果集合重的列的数量。 
mysql_num_rows() 返回一个结果集合中的行的数量。 
mysql_options() 设置对mysql_connect()的连接选项。 
mysql_ping() 检查对服务器的连接是否正在工作,必要时重新连接。 
mysql_query() 执行指定为一个空结尾的字符串的SQL查询。 
mysql_real_connect() 连接一个MySQL服务器。 
mysql_real_query() 执行指定为带计数的字符串的SQL查询。 
mysql_reload() 告诉服务器重装授权表。 
mysql_row_seek() 搜索在结果集合中的行,使用从mysql_row_tell()返回的值。 
mysql_row_tell() 返回行光标位置。 
mysql_select_db() 连接一个数据库。 
mysql_shutdown() 关掉数据库服务器。 
mysql_stat() 返回作为字符串的服务器状态。 
mysql_store_result() 检索一个完整的结果集合给客户。 
mysql_thread_id() 返回当前线程的ID。 
mysql_use_result() 初始化一个一行一行地结果集合的检索。
通过本文的介绍,希望你对C++连接mysql数据库的两种方法有所了解

C++连接mysql的两种方式(ADO连接和mysql api连接)的更多相关文章

  1. ADB连接手机的两种方式(usb数据线连接和wifi连接)

    ADB(Android Debug Bridge)安卓测试桥,它是连接电脑开发端和安卓设备的桥梁,这个安卓设备可以是真实的安卓手机或者平板,也可以是虚拟的安卓模拟器,   这里介绍ADB连接手机的两种 ...

  2. flask 操作mysql的两种方式-sqlalchemy操作

    flask 操作mysql的两种方式-sqlalchemy操作 二.ORM sqlalchemy操作 #coding=utf-8 # model.py from app import db class ...

  3. flask 操作mysql的两种方式-sql操作

    flask 操作mysql的两种方式-sql操作 一.用常规的sql语句操作 # coding=utf-8 # model.py import MySQLdb def get_conn(): conn ...

  4. 利用adb查看手机设备ip和连接手机的两种方式

    电脑安装adb(查看菜鸟adb教程) [cmd]->输入adb devices (设置了path,否则需要 ./路径/adb devices)如图: 查看ip两种方法(可能有更多,目前我还没看到 ...

  5. Navicate 连接阿里云MySQL(两种方式及原理讲解)

    Navicate 连接阿里云(两种方式及原理讲解) 一.直连方式(通过3306端口) 1.概述 2. 环境准备 3.操作及讲解 二.使用SSH通道 1.概述 2.环境准备 3.操作及讲解 如果对你有帮 ...

  6. adb连接手机的两种方式

    adb连接手机进行调试有两种方式,一种使用USB线,一种使用无线WiFi. 第一种  使用USB线连接 1. 在手机上启用USB调试 2. CMD窗口输入adb devices,此时可以看到自己的设备 ...

  7. Java连接Neo4j的两种方式

    1.Neo4j数据库的两种方式 Neo4j可以以两种方式运行: Java应用程序中的嵌入式数据库 通过REST的独立服务器 不管哪一种方式,这个选择不会影响查询和使用数据库的方式. 它是由应用程序的性 ...

  8. php7 连接 mysql 的两种方式

    PHP 5 的使用者可以使用 MySQL extension,mysqli 和 PDO_MYSQL .php 7移除了mysql extension,只剩下后面两种选择.这份文档解释了每个API 的术 ...

  9. MySql入门(2-1)windows下安装mysql的两种方式

    一.下载mysql 1.下载解压MySQL 登录oracle主页,需要用户名和口令: lshengqi@netease.com/1wsx**** 下载路径:: https://dev.mysql.co ...

随机推荐

  1. Apache配置代理服务器的方法(2)

    Proxy指令后面的*号表示客户端使用代理服务器访问的目的地址.在上面两个例子中,*号表示所有地址,即禁止使用代理服务器访问所有地址.而如果想仅禁止某一些地址时,可以参考下面的例子: Order de ...

  2. HSDB

    select t from java.lang.Thread t $JAVA_HOME/bin/java -classpath $JAVA_HOME/lib/sa-jdi.jar sun.jvm.ho ...

  3. python-RabbitMQ基础篇

    一.RabbitMQ简单介绍 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue,  ...

  4. PL/0语言编译器的设计与实现

    一.设计任务 1.1程序实现要求 PL/0语言可以看成PASCAL语言的子集,它的编译程序是一个编译解释执行系统.PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关. PL/0的编译程序和 ...

  5. intelij idea 2016.2注册码

    激活码: 43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1l ...

  6. Oracle警告、跟踪文件(10046、死锁等跟踪)

    跟踪文件由各个后台进程生成,警报日志中记录关键操作包括:     ·所有启动和关闭命令,包括中间命令,如alter database mount     ·实例的所有内部错误(ORA-600错误,只能 ...

  7. SQL Server DBA日常查询视图_数据库对象视图

    1.数据库 use master; exec sp_helpdb 1.1查询数据库大小 1.2查询数据库状态 use msdb select name, user_access_desc, --用户访 ...

  8. thinkphp框架对接支付宝即时到账接口回调的代码

    关于支付宝即时收款接口的对接过程,很简单,也有很多人发过,我这里就不在啰嗦了,对接完成后,在线支付成功后的回调,相对来说,是个难点,,我重点分享下我的经验. 我在开发二代旅游CMS(http://ww ...

  9. IOS开发-属性动画和关键帧动画的使用

    CAMediaTiming是一个协议(protocol),CAAnimation是所有动画类的父类,但是它不能直接使用,应该使用它的子类. 继承关系: CoreAnmiation 核心动画 简写CA ...

  10. Apache-Maven学习(转)

    之前听同学说过关于他们公司使用Maven框架来做项目管理,后来也跟他一起参与过一个小的项目,但没有仔细的去搞,现在好好学习一下. 文章转载自:易百教程 [http:/www.yiibai.com] A ...