展开全部

#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

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

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

  1. java 获取mysql链接_Java中如何获取mysql连接的3种方法总结

    前言 本文主要来说说三种 Java 中获取 mysql 连接的方式,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 第一种:传统的连接方式: 第二种:读取配置文件方式: 第三种:数据库 ...

  2. mysql数据库安装以及登录(如何在windows下安装mysql数据库,以及解决mysql8登录报错问题,绝对是保姆级别的,不要错过哦)

    目录 概述 MySQL的卸载(选看) 停止MySQL服务 软件的卸载 方式1:通过控制面板方式 方式2:通过360或电脑管家等软件卸载 方式3:通过安装包提供的卸载功能卸载 残余文件的清理 清理注册表 ...

  3. 程序员的自我修养--链接、装载与库笔记:Windows下的动态链接

    Windows下的PE的动态链接与Linux下的ELF动态链接相比,有很多类似的地方,但也有很多不同的地方. 1. DLL简介 DLL即动态链接库(Dynamic-Link Library)的缩写,它 ...

  4. php编程怎么和mysql链接_php编程怎么和mysql连接

    php连接mysql的方法: MySQLi - 面向对象<?php $servername = "localhost"; $username = "username ...

  5. mysql oracle linux_mysql、oracle在Linux和Windows下的简单自动备份

    前面一段时间已经安装好了mysql.oracle等常用数据库,但是数据库在使用时必须做到定时备份,这样能够在数据库出现问题时及时恢复到可用状态.那么下面我们就在Linux和Windows环境下测试使用 ...

  6. 如何在SQL Server Management Studio中创建和配置链接服务器以连接到MySQL

    This article will guide you with all the necessary steps to successfully create a linked server in S ...

  7. linux命令mysql启动,在linux中启动mysql服务的命令

    用reboot命令重启linux服务器之后会导致mysql服务终止,也就是mysql服务没有启动.必须要重启mysql服务,否则启动jboss时会 报有关数据库mysql方面的错误. 命令如下: 第一 ...

  8. MySQL(一)SQL执行流程与MySQL架构

    目录 MySQL语句的执行流程 1.通信协议 1.1通信协议 1.2 通信方式 2.查询缓存 3.语法解析和预处理 3.1 词法解析 3.2 语法解析 3.3 预处理器 4.查询优化(Query Op ...

  9. 学习MySQL:使用SELECT语句从MySQL服务器查询数据

    In this series of articles, we are going to learn about the basics of the MySQL database server. In ...

最新文章

  1. HTML5会成为移动互联网应用开发的未来吗?
  2. mysql字段值后面有隐形字符_MySQL 隐形索引
  3. CF#212 Two Semiknights Meet
  4. caxa电子图板2018中文版
  5. JAVASE_File类(实践)——目录拷贝
  6. 一个简单的时间片轮转多道程序内核代码分析
  7. 【题解】 P2151 [SDOI2009]HH去散步
  8. luogu P1880 [NOI1995]石子合并
  9. hapi logs 日志保存代码片段
  10. 6大新品重磅发布,华为云全栈云原生技术能力持续创新升级
  11. 菜鸟的MySQL学习笔记(一)
  12. 传输模型, tcp socket套接字
  13. kaggle--猫狗数据集分类
  14. 每日新闻丨英特尔公布未来10年技术路线图;微软下月起终止支持Windows 7
  15. 北京剩女80万!全国十大单身男女盛产地都在哪?
  16. 是不是选择任何一个方向,都会游向同一个宿命呢
  17. android机开应用速度慢,Android机跑好慢 学会这秘密五招手机瞬间加速!
  18. windows安装python环境、conda常用命令
  19. 《C语言内涵教程》前言
  20. 手把手教你开发Pro/TOOLKIT应用程序(一)

热门文章

  1. python安装Scrapy踩过的坑以及安装指导
  2. 阿里云能耗宝即将发布,助力中小企业绿色升级,参与碳中和万亿市场
  3. SaaS模式云数据仓库:持续保护云上数据及服务安全
  4. 云计算如何使企业的业务受益?
  5. 除了吃月饼,中秋节还能干啥?
  6. 在Data Lake Analytics中使用视图 1
  7. 最佳实践:使用负载均衡SLB IPv6搞定苹果AppStore审核
  8. 手把手,教你用MaxCompute+OpenSearch搭建分布式搜索引擎
  9. 阿里给所有卖家发福利:全球首个人工智能中文字库免费用
  10. 立即生效!帕特·基辛格卸任 VMware 所有职务