纯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万+

ADS2016子电路封装避坑指南:手把手教你制作可复用的自定义Symbol

本文详细介绍了在ADS2016中制作可复用的自定义Symbol的全流程,重点解析了子电路封装的常见问题与解决方案。从电路模块的标准化处理、Hierarchy创建技巧到Symbol视觉优化和库管理策略,帮助工程师提升射频与微波电路设计效率。特别针对Symbol比例适配和引脚优化等核心问题,提供了实用的避坑指南和工程验证方法。

weixin_30275415的博客 213

避坑指南:ZYNQ MPSOC QSPI固化时MT25QU256闪存的特殊配置

本文针对Xilinx ZYNQ UltraScale+ MPSoC平台,详细解析了使用Vitis工具将BOOT.bin固化至Micron MT25QU256ABA QSPI NOR Flash时的特殊配置与避坑指南。重点阐述了Init文件的真实作用、电压与频率的精确匹配策略,以及针对该闪存型号的初始化序列,帮助工程师解决烧录失败、启动异常等常见问题,确保系统可靠启动。

weixin_29175469的博客 271

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

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

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

到底是什么决定了二极管的最高工作频率?

硬件工程师,应该都用过二极管的吧,不过也许有一个误区,大多数人可能并不知道,或者说是理解有问题,下面就来细细说下。 一个问题 先提一个问题:到底是什么决定了二极管的最高工作频率? 估计有不少人会回答是二极管反向恢复时间Trr,也有人会说是二极管结电容,那到底谁是对的呢?或者说都一样,反向恢复时间由结电容决定? 到底什么决定了二极管的最高工作频率,我们暂且不论,不过需要知道的是,二极管的反向恢复时间和结电容根本就是两回事,反向恢复时间绝不能等同于结电容的充放电时间。 为什么我这么说呢?.

weixin_42005993的博客 4832

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

【WRF数据介绍第二期】气象驱动场数据介绍及下载

【WRF数据介绍第二期】气象驱动场数据介绍及下载

WW、forever的博客 2160

windows exe爬虫:exe抓包

在不知情所拦截应用使用的流量时,所以建议用Wireshark。本文利用python代码,实现自动拦截,写入pcap包,并用代码分析流量的协议。这样会在本地目录下生成capture_inbound.pcap,可以用wireshark分析,也可以利用python代码进行分析,如果使用python代码进行分析,需要借助pyshark或者scapy。使用的python WinDivert的包,当然前提也是需要安装Wireshark软件,设置环境变量,并安装pydirvert包。

youbingchen的博客 617

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

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

nathannemo的专栏 943

【AI智能体】全场景AI智能体工作台WorkBuddy实战操作详解

全场景AI智能体工作台WorkBuddy实战操作详解

congge 5493

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

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

nanyouWSH的博客 1万+

SpringAI系列 - MCP篇(二) - MCP Server Boot Starter

此处需注意之前的。

罗小爬的技术宝书 1320

字节系,ali系,ks,pdd最新抓包方案

各大厂安卓逆向

qq_38759383的博客 1145
上一篇: 一段新鲜但又不该新鲜的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、付费专栏及课程。

余额充值