VS在win32平台与mysql链接_visual C++如何与MySQL在windows下建立连接

展开全部

#ifdef WIN32

#include

#include

#include

#else

#include

#include

#define SQLHANDLE static MYSQL

#endif

#include

#include

#include

#include

SQLHANDLE hDBEnv, hDBC;

int DB_Open(char * dbcn, char * usr, char * pwd)

{

int r;

#ifdef WIN32

r = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hDBEnv);

if(r) return 0;

r = SQLSetEnvAttr(hDBEnv,SQL_ATTR_ODBC_VERSION,

(void*)SQL_OV_ODBC3,0);

if(r) return 0;

r = SQLAllocHandle(SQL_HANDLE_DBC, hDBEnv, &hDBC);

if(r) return 0;

r = SQLConnect(hDBC,

(unsigned char *)dbcn, strlen(dbcn),

(unsigned char *)usr, strlen(usr),

(unsigned char *)pwd, strlen(pwd));

return r==SQL_SUCCESS ||e5a48de588b662616964757a686964616f31333262356165 r==SQL_SUCCESS_WITH_INFO;

#else

mysql_init(&hDBC);

MYSQL * rx = mysql_real_connect(

&hDBC, dbcn, usr, pwd, NULL, 0, NULL, 0);

if(!rx) return 0;

return 1;

#endif

}//end DB_Open

int DB_Exec(char * sql)

{

#ifdef WIN32

SQLHANDLE hStatement = NULL;

SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStatement);

SQLExecDirect(hStatement,(unsigned char *)sql, strlen(sql));

SQLCloseCursor(hStatement);

SQLFreeHandle(SQL_HANDLE_STMT, hStatement);

hStatement = NULL;

#else

mysql_real_query (&hDBC, sql, strlen(sql));

#endif

return 1;

}//end DB_Exec

int DB_Close(void)

{

#ifdef WIN32

SQLDisconnect(hDBC);

SQLFreeHandle(SQL_HANDLE_DBC, hDBC);

SQLFreeHandle(SQL_HANDLE_ENV, hDBEnv);

#else

mysql_close(&hDBC);

#endif

return 1;

}//DB_Close()

#ifndef WIN32

typedef struct tagMySQLRecordset {

MYSQL_RES * hRecord;

void * * row;

int * size;

int cols;

} MYSQLRecordset;

#endif

void DB_CleanQuery(void *hRecordset)

{

if(!hRecordset) return;

#ifdef WIN32

__try {

SQLCloseCursor(hRecordset);

SQLFreeHandle(SQL_HANDLE_STMT, hRecordset);

hRecordset = NULL;

}__finally{

return;

}//end try

#else

MYSQLRecordset * hRec = (MYSQLRecordset *) hRecordset;

mysql_free_result (hRec->hRecord);

free(hRec->row); hRec->row = NULL;

free(hRec->size); hRec->size = NULL;

free(hRec); hRec = NULL;

#endif

}//end DB_CleanQuery

int DB_Next(void * hRecordset)

{

int r=0; if(!hRecordset) return 0;

#ifdef WIN32

r = SQLFetch(hRecordset);

r = r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO;

if(!r) {

DB_CleanQuery(hRecordset);

}//end if

#else

MYSQLRecordset * hRec = (MYSQLRecordset *) hRecordset;

MYSQL_ROW row = mysql_fetch_row (hRec->hRecord);

if(row) {

for(int i=0; icols; i++) {

memcpy(hRec->row[i], row[i], hRec->size[i]);

}//next i

r = 1;

}else{

DB_CleanQuery(hRecordset);

r = 0;

}//end if

#endif

return r;

}//end DB_Next

int DB_params_count(const char * fmt)

{

int i=0, j=0;

while(fmt[i]) {

if(fmt[i]=='%') j++;

i++;

}//end while

return j;

}//end DB_params_count

void * DB_Query(char *sql, const char *fmt, ...)

{

int r=0;

int cols = DB_params_count(fmt);

if(cols<1) return NULL;

#ifdef WIN32

SQLHANDLE hStatement = NULL;

SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStatement);

r = SQLExecDirect(hStatement,(unsigned char *)sql, strlen(sql));

r = r==SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO;

if(!r) {

return NULL;

}//end if

#else

r = mysql_real_query (&hDBC, sql, strlen(sql));

if(r) return NULL;

MYSQL_RES * rec = NULL;

rec = mysql_store_result (&hDBC);

if(!rec) return NULL;

MYSQLRecordset * hStatement

= (MYSQLRecordset *)malloc(sizeof(MYSQLRecordset));

if(!hStatement) return NULL;

memset(hStatement, 0, sizeof(MYSQLRecordset));

hStatement->hRecord = rec;

hStatement->cols = cols;

hStatement->row = (void **)malloc(cols * sizeof(void *));

memset(hStatement->row, 0, cols * sizeof(void *));

hStatement->size = (int *)malloc(cols * sizeof(int));

memset(hStatement->size, 0, cols * sizeof(int));

#endif

va_list ap; va_start(ap, fmt);

void * var; char buf[32];

int i=0,j=0,k=0,sz=0; char c=0;

int len = strlen(fmt); int bad=1;

#ifdef WIN32

int col=1;

#else

int col=0;

#endif

while(fmt[i]) {

c = fmt[i++];

if(c != '%') continue;

c = fmt[i++];

var = va_arg(ap, void *);

if(c == 'd') {

#ifdef WIN32

SQLBindCol(hStatement, col, SQL_C_SLONG, var, 4,NULL);

#else

hStatement->row[col] = var;

hStatement->size[col] = sizeof(long);

#endif

col++;

continue;

}//end if

if(c == 'f') {

#ifdef WIN32

SQLBindCol(hStatement, col, SQL_C_FLOAT, var, 4,NULL);

#else

hStatement->row[col] = var;

hStatement->size[col] = sizeof(float);

#endif

col++;

continue;

}//end if

memset(buf, 0, 32); bad=1;

for(j=i-1; j

c = fmt[j];

if(c>='0' && c<='9') buf[j-i+1]=c;

if(c=='s') {bad=0; k=j+1; break;}

}//next j

if(bad) return NULL;

sscanf(buf, "%d", &sz);

#ifdef WIN32

SQLBindCol(hStatement, col, SQL_C_CHAR, var, sz, NULL);

#else

hStatement->row[col] = var;

hStatement->size[col] = sz;

#endif

col++;

i = k;

}//end while

va_end(ap);

return hStatement;

}//end DB_Rec

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用Serverless Kubernetes和Kaniko快速自动化构建容器镜像

前言&#xff1a; 在云原生时代中&#xff0c;容器镜像是一切应用分发的基础载体&#xff0c;除了dockerhub作为流行的镜像仓库外&#xff0c;各大公有云厂商也都提供了功能丰富镜像仓库服务&#xff0c;如ACR&#xff08;Aliyun Container Registry&#xff09;, GCR&#xf…

2020边缘计算状态报告:2028年企业IT基础设施边缘支出将达87亿美元

近日&#xff0c;知名市场研究机构State of the Edge发布了2020年最新的对边缘计算领域的研究报告——《边缘计算状态报告2020》&#xff08;以下简称“报告”&#xff09;。“边缘化”是指人或事物从中心和主流位置向“非中心”、“非主流”方向移动。而本次报告指出&#xff…

想提升微服务容错性?试试这5种模式

作者 | Igor Perikov译者 | 陆离责编 | 徐威龙出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09; 在本文中&#xff0c;我将介绍微服务中的几种容错机制及其实现的方法。如果你在维基百科上查找“容错性”&#xff0c;你将会发现有如下的定义&#xff1a;“容…

21世纪了还愚公移山?数据库这么迁移更稳定!

背景 在系统的快速迭代过程中&#xff0c;业务系统往往部署在同一个物理库&#xff0c;没有做核心数据和非核心数据的物理隔离。随着数据量的扩大这种情况会带来稳定性的风险&#xff0c;如库的慢sql&#xff0c;磁盘&#xff0c;IO等等都会相互整体影响&#xff0c;从而影响核…

Oracle 创建表空间、用户、权限_(plsql)

背景&#xff1a;企业内部oracle数据库日常oracle表空间、用户、权限操作 文章目录1. 使用dba用户登录plsql2. 创建表空间3. 创建用户4. 赋予用户权限5. 验证6. 完整脚本1. 使用dba用户登录plsql 2. 创建表空间 -- 创建表空间设置表空间大小 CREATE TABLESPACE fisknow DATAFI…

2019五个最棒的机器学习课程

凭借强大的统计学基础&#xff0c;机器学习正在成为最有趣&#xff0c;节奏最快的计算机科学领域之一&#xff0c;目前已经有无穷无尽的行业和应用正在使用机器学习使它们更高效和智能。 聊天机器人、垃圾邮件过滤、广告投放、搜索引擎和欺诈检测是机器学习模型正在实际应用于…

“天河二号”总工程师杜云飞谈星光超算应用平台设计

整理 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】12 月 21-22 日&#xff0c;OpenI/O 启智开发者大会在深圳召开。在大会上&#xff0c; 国家超级计算广州中心总工程师、“天河二号”总工程师杜云飞发表了题为《星光超算应用平台》的主题报告&…

蚂蚁金服开源 SOFAJRaft:生产级 Java Raft 算法库

什么是 SOFAJRaft&#xff1f; SOFAJRaft 是一个基于 Raft 一致性算法的生产级高性能 Java 实现&#xff0c;支持 MULTI-RAFT-GROUP&#xff0c;适用于高负载低延迟的场景。 使用 SOFAJRaft 你可以专注于自己的业务领域&#xff0c;由 SOFAJRaft 负责处理所有与 Raft 相关的技…

如何在mysql查询结果集中得到记录行号_获取MySQL查询结果集中记录行号的方法...

如果需要在查询语句返回的列中包括一列以指示整个结果集中记录的行号&#xff0c;则ISO SQL: 2003标准建议的方法是提供ROW_NUMBER()/ RANK()函数. Oracle可以使用标准方法(版本8i或更高版本)或非标准ROWNUM. MS SQL Server在2005版中提供了ROW_NUMBER()函数. 但是在MySQL中似乎…

开发者必看!探秘阿里云Hi购季开发者分会场:海量学习资源0元起!

2019阿里云云上Hi购季活动已经于2月25日正式开启&#xff0c;从已开放的活动页面来看&#xff0c;活动分为三个阶段&#xff1a; 2月25日-3月04日的活动报名阶段、3月04日-3月16日的新购满返5折抢购阶段、3月16日-3月31日的续费抽豪礼5折抢购阶段。 活动核心亮点&#xff1a;…

疫情严重,潜伏期也有传染性?科技公司在行动

整理 | 阿司匹林出品 | CSDN云计算新型冠状病毒的感染人数仍在不断增加。根据1月26日的最新数据&#xff0c;全国新型冠状病毒感染的肺炎确诊2005例&#xff0c;疑似2684例&#xff0c;死亡56例。据央视报道&#xff0c;国家卫生健康委员会主任马晓伟在国新办新闻发布会上表示&…

python方法定义..._解析Python类中的方法定义

最近在学习类过程中&#xff0c;绑定方法这个概念没有理解透彻&#xff0c;所以在网上找了很多相关博客、文章研究到底是怎么一回事。因为有的文章所陈述与我在python3.5版本实际实验中有些出入&#xff0c;所以经过实践后总结出以下结论。对于Python类中&#xff0c;方法的定义…

阿里巴巴复杂搜索系统的可靠性优化之路

背景 搜索引擎是电商平台成交链路的核心环节&#xff0c;搜索引擎的高可用直接影响成交效率。闲鱼搜索引擎作为闲鱼关键系统&#xff0c;复杂度和系统体量都非常高&#xff0c;再加上闲鱼所有导购场景都依靠搜索赋能&#xff0c;搜索服务的稳定可靠成为了闲鱼大部分业务场景可…

Kubernetes 将何去何从?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | Kevin Casey译者 | 弯月责编 | 唐小引封图 | CSDN 付费自图虫创意出品 | CSDN 云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;【导读】随着越来越多的人开始使用 Kubernetes&#xff0c;IT 领导者对新的一年有哪些期…

活体检测很复杂?仅使用opencv就能实现!(附源码)

什么是活体检测&#xff0c;为什么需要它&#xff1f; 随着时代的发展&#xff0c;人脸识别系统的应用也正变得比以往任何时候都更加普遍。从智能手机上的人脸识别解锁、到人脸识别打卡、门禁系统等&#xff0c;人脸识别系统正在各行各业得到应用。然而&#xff0c;人脸识别系…

Pod在多可用区worker节点上的高可用部署

一、 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS&#xff0c;这种部署方式的目的是可以让一个应用的多个pod&#xff08;至少两个&#xff09;能够分布在不同的可用区&#xff0c;起码不能分布在同一个可用区&#xff0c;已达到高可用或者同…

揭秘:蚂蚁金服bPaaS究竟是什么?

去年9月&#xff0c;蚂蚁金服在杭州云栖ATEC发布了分布式金融核心套件bPaaS&#xff08; Business Platform As a Service &#xff09;&#xff0c;对外开放自身沉淀的“产品合约”、“资产交换”、“资产核心”、“会计核算”、“计价” 等金融核心组件&#xff0c;而这款号称…

云计算的 2020:云原生崛起,重新定义软件!

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | Ashish Sukhadeve译者 | 弯月责编 | 唐小引封图 | CSDN 付费自图虫创意出品 | CSDN 云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;随着 2006 年末 AWS S3 数据存储的问世&#xff0c;云计算发展成为了 IT 行业的三…

用PL/SQL Develpoer工具完成导入和导出

文章目录一、用PL/SQL Develpoer工具完成导入导出1. 导出2. 导入3. 补充前言&#xff1a;首先&#xff0c;我们导入导出数据&#xff0c;肯定是要通过oracle自带的可运行程序来完成数据的导入导出工作&#xff0c;imp.exe 和exp.exe这两个可运行文件都放在oracle安装目录下的BI…

关于Paxos 幽灵复现问题的看法

由于郁白之前写的关于Multi-Paxos 的文章流传非常广, 原文提出了一个叫"幽灵复现" 的问题, 认为这个是一个很诡异的问题, 后续和很多人交流关于一致性协议的时候, 也经常会提起这个问题, 但是其实这个问题我认为就是常见的"第三态"问题加了一层包装而已. …