纯C下用ODBC访问数据库(实例)

ODBC连接数据库实例 2012-12-13 22:27 (分类:默认分类) 1.首先建立数据源,正常情况下载控制面板-管理工具-数据源,打开后有用户DSN系统DSN 两者区别在于系统级的DSN,就是对该系统的所有登录用户可用,用户DSN是只对建立它的用户可用 2.配置自己的DSN,比如连接ACCESS数据库 单击“添加”按钮,显示“创建新数据源”对话框。选择“Microsoft Access Drive 阅读详情

    最近有点发烧,想用DLL来做JSP……
    一天什么工作都没做,终于把它弄出来了,可是明天就惨了。
    取这么个名子就为了把大家骗来,呵呵。不过我确实努力做了,应该在纯C下能用吧,其实除了考二级我没用过纯C做过东西,我也不清楚这算不算纯C。
   
测试说明:
    1.在E盘下放一下名为ODBC.MDB的Access数据库。
    2.在这个数据库中建一个名为tips的表。
    3.表里面有三个字段,第一个字段是数字,后两个是字符串。
    因为sql.h、sqltypes.h、sqlext.h里面有很多类似ULONG的定义,
为了简单我加上了windef.h如果你允许windows.h的语那么在windows.h
里己经包含了windef.h我是为了尽一切努力少包含外部文件才这样做的。

    PS:另外还要确保你的IDE己经设置好ODBC了。我用的是Dev,在工程属性里设置了一个libodbc32.a的文件参数。如果没设置这个会出现一堆找不到符号的提示。别的IDE好像不一样,VC2008好像直接可以。

/**
   descript: 纯C下用ODBC访问数据库。
   date: 2008.4.9
   qq: 214395
**/

#ifndef _DOUDYA_C_ODBC_H
#define _DOUDYA_C_ODBC_H
/** 包含文件 **/
#include <windef.h>
#include <stdio.h>
#include <sql.h>
#include <sqlext.h>

/** 简单的宏,用于判断ODBCAPI的执行结果是否正确 **/
#define isSuc(result) ((result) == SQL_SUCCESS || (result) == SQL_SUCCESS_WITH_INFO)

/** 可扩展设置 **/
char szConnectString[256] = "driver={Microsoft Access Driver (*.mdb)};DBQ=E://ODBC.MDB";
char szSQL[256] = "select * from `tips`";
/** 输出缓存 **/
char szDriverOutput[256];
short sDriverOutputLength;
/** 用于测试的变量 **/
int a = 0;
char b[255];
char c[255];
long temp = 0;

/** 用于测试的函数 **/
int main(){
    short sret; //返回代码
    void* henv;  //环境句柄
    void* hdbc;  //连接句柄
    long mode;//提交模式
    void* hsmt; //语句句柄
/** 申请环境句柄 **/
    sret = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
    if(!isSuc(sret))printf("申请环境句柄出错");
/** 设置环境属性,声明ODBC版本 **/
    sret = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,SQL_IS_INTEGER);
    if(!isSuc(sret))printf("声明ODBC版本出错");
/** 申请连接句柄 **/
    sret = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
    if(!isSuc(sret))printf("申请连接句柄出错");
/** 设置连接属性 **/
    sret = SQLSetConnectAttr(hdbc,SQL_ATTR_AUTOCOMMIT,(void*)SQL_AUTOCOMMIT_OFF,SQL_IS_INTEGER);
    if(!isSuc(sret))printf("设置连接属性出错");
/** 取得连接属性 **/
    sret = SQLGetConnectAttr(hdbc,SQL_ATTR_AUTOCOMMIT,(void*)&mode,sizeof(mode) + 1,NULL);
    if(!isSuc(sret))printf("取得连接属性出错");
/** 连接数据源 **/
    sret = SQLDriverConnect(hdbc,NULL,(unsigned char *)szConnectString,SQL_NTS,(unsigned char *)szDriverOutput,256,&sDriverOutputLength,SQL_DRIVER_NOPROMPT);
    if(!isSuc(sret))printf("连接数据源出错");
/** 分配语句句柄 **/
    sret = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hsmt);
    if(!isSuc(sret))printf("分配语句句柄出错");
/** 执行语句 **/
    sret = SQLExecDirect(hsmt,(SQLCHAR *)szSQL,SQL_NTS);
    if(!isSuc(sret))printf("执行语句出错");
/** 绑定结果集和获得数据 **/
/**
   小提示,这里应该可以先取得字段列表然后用循环做成自动邦定的。
**/
    SQLBindCol(hsmt,1,SQL_C_LONG,&a,sizeof(a),&temp);//测试时
    SQLBindCol(hsmt,2,SQL_C_CHAR,&b,sizeof(b),&temp);//测试时
    SQLBindCol(hsmt,3,SQL_C_CHAR,&c,sizeof(c),&temp);//测试时
/** 取得数据 **/
    while(true){
/** 滚动 **/
        sret = SQLFetchScroll(hsmt,SQL_FETCH_NEXT,0);
/**
前面如果发生错误,这里很可能得不到SQL_NO_DATA_FOUND而发生死循环,
所以我不用而用SQL_SUCCESS来判断,但这句在杂复的程序中里依然有用。
**/
        //if (sret == SQL_NO_DATA_FOUND) break; //如果没有数据就打断。
        if (sret != SQL_SUCCESS) break;
        printf("a = %d/r/n",a);//测试时
        printf("b = %s/r/n",b);//测试时
        printf("c = %s/r/n",c);//测试时
    }
/** 释放语句句柄 **/
    SQLFreeHandle(SQL_HANDLE_STMT,hsmt);
/** 提交连接的事务 **/
    SQLEndTran(SQL_HANDLE_DBC,hdbc,SQL_COMMIT);
/** 断开与数据源的连接 **/
    SQLDisconnect(hdbc);
/** 释放连接句柄 **/
    SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
/** 释放环境句柄 **/
    SQLFreeHandle(SQL_HANDLE_ENV,henv);
/////////无关语句,仅仅是让程序停下来,看结果。
    getchar();//测试时
}

#endif
 

【C语言】使用ODBC连接Microsoft SQL server数据库 因为最近要用C对SQL Server进行连接,但发现网上关于这方面的资料不多,就把这两天查到的资料和心得归拢了下,留着以后自己看。 使用C语言通过ODBC(开放式数据库互连)对SQL Server进行连接,分为两步操作:1.配置本地ODBC环境;2.码代码...=_= 【首先配置本地环境】 1.启动SQLSERVER服务,例如:HNHJ,开始菜单 ->运行 ->net start mssql 阅读详情

相关推荐

golang ODBC 访问access数据库

最近项目需要,需要操作access,以前是用VC++ OLE访问,网络用ACE库,感觉很庞大。。。决定用go试试 网上用的最多的就是这个https://github.com/weigj/go-odbc 测试时碰到两个问题 ODBC database driver for Go Install: cd $GOPATH/src git clone git://github.

梦想带我去飞翔 8741

kylin x86编译libodbc.a

【代码】kylinx86编译libodbc.a。

qq_42896627的博客 275

基于windows系统自带ODBC配置C/C++数据库程序开发环境

by 哇哈爱吃糖 2019/11/28 目录:一、环境准备二、MySQL Connector/ODBC的安装三、添加ODBC 数据源四、通过ODBC数据源在C/C++程序中操作数据库1. 命令行手动编译(基于MinGW-w64)2.dev-c++环境下编译3.CLion + MinGW-w64环境下编译 一、环境准备 操作系统:windows10 数据库:MySQL8.0(msi安装版本) ...

哇哈爱吃糖的博客 3302

C语言ODBC方式连接DM数据库

C语言ODBC方式连接DM数据库 一、安装 UNIX ODBC 下载 unixODBC 和 unixODBC-devel 。 安装 unixODBC 和 unixODBC-devel。 [root@RS1821 wt]# rpm -ivh unixODBC-devel-2.3.1-14.el7.x86_64.rpm unixODBC-2.3.1-14.el7.x86_64.rpm warning: unixODBC-devel-2.3.1-14.el7.x86_64.rpm: Header V3 RS

飞奔的屎壳郎 2359

Windows 10下使用C语言通过ODBC链接MySQL数据库

Windows 10下使用C语言通过ODBC链接MySQL数据库 Windows 10下使用C语言通过ODBC链接MySQL数据库 安装MySQLConnector/ODBC 配置数据源名称DSN 查看C语言的 ODBC API 编写代码 链接 运行 安装MySQLConnector/ODBC https://dev.mysql.com/downloads/connector...

latstars的博客 2421

c语言版ODBC创建数据源实例

将KingbaseES数据库中Student表得数据备份到SQL SERVER数据库中。在应用程序运行前,已经在KingbaseES和SQL SERVER中分别建立了STUDENT关系表:建表代码:CREATE TABLE Student (  Sno CHAR(9) PRIMARY KEY,   //Sno是主键  Sname CHAR(20) UNIQUE,  Ssex CHAR(2),  S

追风破雨 3180

c语言ODBC连接数据库

在vc++ 6.0里,用c++通过ODBC API,使用函数SQLConnect连接数据库。 #include    #include    #include "sqlext.h"   using namespace std; /*用ODBC API访问数据库:连接数据库*/ int main(){     SQLHENV henv;  //环境句柄        SQ

水神 7231

C语言通过ODBC函数操作Access数据库(mdb和accdb格式)(char字符数组)

编译环境:Windows XP + Visual Studio 2010数据库:Access 2010,accdb格式本例程只使用char[]字符数组,不使用wchar_t[]字符数组,更适合C语言初学者。如果读取字符串时,db_bind_str提供的字符数组空间小了,db_fetch会执行失败返回-2。由于Windows系统设计原因,char[]字符数组只能存储GB2312编码的字符串,wchar_t[]字符数组只能存储UTF-16编码的字符串。

ZLK1214的专栏 1310

c语言连接数据库方法odbc方法

c语言与数据集采用odbc方式连接

qq_36136176的博客 6944

libodbc1_2.3.1-4.1_arm64.deb

安装erlang所需依赖包 libodbc1_2.3.1-4.1_arm64.deb

odbc方式读取数据库

odbc连接数据库,数据库的文件没有上传。可能会有问题

纯C下用ODBC访问数据库(实例) 转载

http://blog.youkuaiyun.com/moomee/archive/2008/04/09/2271085.aspx最近有点发烧,想用DLL来做JSP……一天什么工作都没做,终于把它弄出来了,可是明天就惨了。取这么个名子就为了把大家骗来,呵呵。不过我确实努力做了,应该在纯C下能用吧,其实除了考二级我没用过纯C做过东西,我也不清楚这算不算纯C。 测试说明:1.在E盘下放一下名为ODBC.MDB...

weixin_30865427的博客 323

C/C++使用ODBC操作SQL server数据库

这是一个用C通过ODBC操作SQL server数据库的程序,通过一个简单的通信录管理系统实现了对数据库的增删查改操作,希望对正在学习数据库的小伙伴有帮助!

ODBC、OLE DB、 ADO的区别

一、ODBC ODBC的由来 1992年Microsoft和Sybase、Digital共同制定了ODBC标准接口,以单一的ODBC API来存取各种不同的数据库。随后ODBC便获得了许多数据库厂商和Third-Party的支持而逐渐成为标准的数据存取技术。 ODBC以当时的业界标准规范X/OpenCall-LevelInterface(CLI)和ISO/IEC9075-3Call-Le

殷晶晶-廊坊师范学院信息技术提高班第八期 2万+

STM32进入HardFault_Handler时,如何找到问题所在?

当STM32进入HardFault_Handler时,定位问题发生的点

m0_60831979的博客 2150

在pycharm2021.2中学习opencv图像处理,基于python3.9.7、pycharm完成配置

在pycharm中学习opencv图像处理安装python下载python安装包开始安装安装pycharm社区版下载pycharm开始安装如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 安装python 使用pycharm学习opencv应该是最简单的了,对新手比较友好,

steveqobs 7708

C#通过ODBC连接Sybase数据库.db文件

C#通过ODBC连接Sybase数据库.db文件 C#通过ODBC连接Sybase数据库.db文件 最近有个需求,需要连接sybase数据库,但只给了一个.db文件,好在数据库使用的是默认密码,故最终使用ODBC数据源连接上了数据库。我的解决步骤如下,有需要的可以进行参考,不对的地方欢迎指正。 安装本地数据库 这个一开始不知道什么版本,下载了Sql Anywhere最新版,连接的时候提示版本不对,...

你那么美你别皱眉的博客 2158

SSTI模板注入及绕过姿势(基于Python-Jinja2)

http://xmctf.top:8962/?name={{%22%22[%22\x5f\x5fclass\x5f\x5f%22]["\x5F\x5Fbase\x5F\x5F"]["\x5F\x5Fsubclasses\x5F\x5F"]()[233]["\x5F\x5Finit\x5F\x5F"]["\x5F\x5Fglobals\x5F\x5F"]["\x5F\x5Fbuiltins\x5F\x5F"]['eval']("\x5F\x5Fimport\x5F\x5F('os'))")}}

Y4tacker的博客 1万+

C/C++语言ODBC连接SqlServer数据库

VC6.0连接数据库 C或C++语言ODBC方式连接SqlServer数据库,需要先正确配置数据源才能连接。 VC6.0连接到数据库 VC2013连接到数据库 数据库创建一数据表 use test_db; if exists(select * from sysobjects where id=object_id('test')) drop table test create table tes...

qq_43521551的博客 6828

基于matlab实现的水果识别系统设计

本项目针对多种常见水果混合的图像,利用 Matlab 软件,对水果的识别进行研究。根据水果和背景的差别选取阈值,对去噪增强对比度后的图像进行二值化处理。再对图像进行边缘检测,选定连通区域,标记后再对不同种水果的颜色,形状,大小等特征进行快速识别水果,从而实现对水果的正确分拣。:水果识别、MATLAB、数字图像处理。

热情、奔放、快乐编程! 4854

uniapp [安卓苹果App端] - 详细实现PDF预览功能在线预览PDF文档,Uniapp App端实现pdf文件预览在线预览pdf二进制文件流、本地pdf文档、PDF文件地址url路径(解决白屏

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,uniapp在线预览pdf功能,在安卓苹果app平台实现PDF的预览查看,uniappApp端实现pdf文件预览,UNIAPP在线预览PDF文档,Uniappapp在线预览pdf文件流,从后端接口里获取pdf文件如何转成链接预览,预览pdf的插件,uni-app的pdf预览功能,uniapp使用pdf.js插件预览pdf文件,预览pdf白屏没有报错,打开后没反应,打开是空白,加载PDF时发生错误,如

🏆 前端领域优质创作者 1万+

MDAC、DAO、ADO、OLE DB、ODBC之间的关系

MDAC、DAO、ADO、OLE DB、ODBC之间的关系

nathannemo的专栏 943

【ATC/DTC方法第四期】GOT09-dT-tao 昼夜温度周期模型方法介绍(含Python代码实现)

GOT09-dT-tao 模型是一种经过简化和参数固定的 昼夜温度周期模型(Diurnal Temperature Cycle, DTC)。它从 GOT09 模型(Göttsche and Olesen, 2009)衍生而来,但更加轻量化,更适合在数据不足或参数估计困难的情境下使用。

WW、forever的博客 146

C/C++使用ODBC连接MSSQL数据库

在C/C++中通过ODBC连接MSSQL数据库的一个全部过程,希望能帮助到有需要的人。

nanyouWSH的博客 1万+

巡检机器人的基于ROS系统的任务管理架构设计总结

本文探讨了基于ROS(机器人操作系统)的工业巡检机器人任务管理架构设计,提出分层闭环方案。架构围绕稳、准、活、扩四大目标,分为感知层(多源数据融合)、调度层(智能决策)、执行层(动作控制)和数据层(存储交互)。关键技术包括ROS2实时性优化、功能包复用和多机器人协同调度。实践案例显示,该架构在电力巡检中使任务完成率达99%,在化工园区实现95%覆盖率。当前挑战包括SLAM地图漂移和多机通信延迟,未来可通过语义SLAM和区域通信优化。

start_up_go的博客 475

抖音创作者必备工具!免费一键批量下载无水印视频 + 一键提取抖音视频文案

抖音创作者必备工具!免费一键批量下载无水印视频 + 一键提取抖音视频文案

XiaoqiangClub的博客 3363
上一篇: 一段新鲜但又不该新鲜的Java代码。
下一篇: JSP用Throwable做日志记录
moomee
博客等级 码龄20年 6粉丝 10原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值