C++连接mysql的两种方式(ADO连接和mysql api连接)

时间:2023-01-21 09:02:13

一、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版本不一定相同)。

C++连接mysql的两种方式(ADO连接和mysql api连接)

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

C++连接mysql的两种方式(ADO连接和mysql api连接)

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

C++连接mysql的两种方式(ADO连接和mysql api连接)

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. Ubuntu 完全卸载Apache2

    安装时候使用的一键安装,很简单 apt-get install apache2 这两天想配置一个lighttpd,但是一直不能成功,今天在公司用虚拟机里面的Ubuntu 配置lighttpd成功了,怀 ...

  2. 第二次作业———&OpenCurlyDoubleQuote;A&plus;B Format”思路与总结

    GitHub链接: https://github.com/zzy19961112/object-oriented "A+B Format" 题目 解题思路: 一开始粗略看这道题,熟 ...

  3. &lbrack;AngularJS&rsqb; Accessible Button Events

    Often buttons need to be handled by JavaScript, and if done improperly it can lead to accessibility ...

  4. prop&lpar;&rpar;、attr&lpar;&rpar;和data&lpar;&rpar;

    设置元素属性,用attr()还是prop()? 对于取值为true /false的属性,如 checked/selected/readonly或者disabled,使用prop(),其他属性使用 at ...

  5. &lbrack;编织消息框架&rsqb;&lbrack;netty源码分析&rsqb;7 Unsafe 实现类NioSocketChannelUnsafe职责与实现

    Unsafe 是channel的内部接口,从书写跟命名上看是不公开给开发者使用的,直到最后实现NioSocketChannelUnsafe也没有公开出去 public interface Channe ...

  6. 100-days&colon; twenty-seven

    Title: Criticism for China's child modeling(代指从事模特行业的人) industry after video of 3-year-old being kic ...

  7. &lbrack;algorithm&rsqb;&lbrack;security&rsqb; 模糊哈希(转)

    modsecurity中用到:  http://ssdeep.sourceforge.net/ 原文:http://www.xuebuyuan.com/1536438.html 最近看一篇paper, ...

  8. vue中的axios

    数据的获取最常用的就是用ajax,但在vue框架中,axios则更为方便.它是基于es6的promise 以下内容引用自[最骚的就是你] 不再继续维护vue-resource,并推荐大家使用 axio ...

  9. 芯灵思SInA33开发板怎样烧写镜像文件

    上一节已经制作好了linux镜像文件,现在将它烧入开发板中需要的工具有 * SINLINX-A33_qt-4.8.7_lcd1024x600_v3.1 #镜像文件 * PhoenixSuit #烧写工 ...

  10. pl&sol;sql declare loop if

    -- 1.判断表是否存在,如果存在则drop表 -- 2.创建表 -- 3.插入1W条数据 -- 4.每1K条commit一次 declare v_table ):='STUDENT'; --表名 v ...