使用ODBC API访问数据库简单流程,供参考使用:

 ODBC API
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 
    SQLHENV     m_hEnviroment;              //数据库环境句柄,属于老大级别的
    SQLHDBC     m_hDatabaseConnection;      //数据库连接句柄,老大以后就是他了,有了他数据库就连接上了
    SQLHSTMT    m_hStatement;               //执行语句句柄,最终执行SQL于句的句柄

// 使用ODBC API建立数据库连接分为3部分:
    // 申请环境句柄,
    // 使用环境句柄申请连接句柄,
    // 使用连接句柄连接数据库。

/* 申请环境变量 */
    // 申请各种句柄都靠这个函数,
    // 参数1是要申请句柄的类型,
    // 参数2为申请该句柄依靠的句柄(老大没依靠,所以是NULL),申请结果在参数3中保存
    SQLRETURN sqlReturn = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &m_hEnviroment);
    // 返回值代表着执行的意义,如下面判断,SUCCESS_WITH_INFO相当于是警告,虽然成功了,但是可能有问题
    if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO)
    {
        ;
    }
    // 设置ODBC环境属性
    SQLSetEnvAttr(m_hEnviroment, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
    
    /* 申请连接句柄 */
    sqlReturn = SQLAllocHandle(SQL_HANDLE_DBC, m_hEnviroment, &m_hDatabaseConnection);
    if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO)
    {
        ;
    }
    
    // 准备连接工作
    SQLWCHAR* sqlwcaDsnName = _T("mysqlDB");        //数据源名称
    SQLWCHAR* sqlwcaUserName = _T("root");          //用户名称
    SQLWCHAR* sqlwcaPassWord = _T("kingview");      //密码
    // 连接数据源
    sqlReturn = SQLConnect( m_hDatabaseConnection
                            ,sqlwcaDsnName, SQL_NTS
                            ,sqlwcaUserName, SQL_NTS
                            ,sqlwcaPassWord, SQL_NTS);

if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO)
    {
        ;
    }

/* 申请SQL语句句柄 */
    SQLRETURN sqlReturn = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement);
    if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO)
    {
        ;
    }

/* 构造SQL语句 */
    CString cstrSql;
    cstrSql.Format(_T("SELECT * FROM mytable "));
 
    /* 执行SQL语句 */
    sqlReturn = SQLExecDirect(m_hStatement, cstrSql.GetBuffer(), SQL_NTS);
    if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO)
    {
        ;
    }
 
    /* 获得返回结果的行数 */
    SQLINTEGER sqlnIdCount = ;
    sqlReturn = SQLRowCount(m_hStatement,&sqlnIdCount);
 
    /* 开始读取结果 */
    // 读取第一行时要调用,以后依次调用就可以下移行数,直到不返回SQL_SUCCESS
    sqlReturn = SQLFetch(m_hStatement);
    if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO)
    {
        ;
    }
 
    SQLINTEGER sqlnID;
    SQLINTEGER sqlnIDLength = ;
 
    /* 获得数据 */
    SQLGetData(m_hStatement, , &sqlnIDLength);
    // 参数1为执行语句的句柄,
    // 参数2为所要得到的数据位于的列数(SQL语句中),
    // 参数3为数据类型,这个比较多,需要看一下MSDN
    // 参数4为保存的位置(地址),
    // 参数5为参数4可用的位置,既然参数3已设定为长整型,所以这里可使用0
    // 参数6为实际返回的长度

// 释放句柄,断开连接
    SQLFreeHandle(SQL_HANDLE_STMT, m_hStatement);
    SQLFreeHandle(SQL_HANDLE_DBC, m_hDatabaseConnection);
    SQLFreeHandle(SQL_HANDLE_ENV, m_hEnviroment);

C++中使用ODBC API访问数据库例程的更多相关文章

  1. Windows下使用ODBC API访问数据库之关键

    本文采用SQL2005 + VS2008环境,以ODBC API方式成功连接数据库. 1.SQL安装和环境配置 这部分网上随便搜一下都有很多资料,而且很容易就可以配置成功. 注意的关键点: SA账号配 ...

  2. JDBC API访问数据库的基本步骤。

    JDBC本质:官方定义了一套操作所有关系型数据库的规则(接口),各个数据库厂商实现这个接口,提供数据库驱动jar包. 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类. 任 ...

  3. 通过JDBC API访问数据库的基本步骤

    1.获取要访问的数据库的JDBC驱动程序的类库文件,把它放到classpath中. 2.在程序中加载并注册JDBC驱动程序.例如,以下代码用于加载并注册MySQL驱动程序: //加载MySQL Dri ...

  4. LUA利用第三方API访问数据库

    ===========数据库访问--第三方 http { upstream backend { drizzle_server 192.168.4.119:3306 protocol=mysql dbn ...

  5. 十八、springboot中hibernate配置sessionFactory访问数据库

    前提 在yml或properties文件中配置数据库与数据库连接池 Hibernate配置 几种方式: 方式一: @Configuration public class HibernateConfig ...

  6. Java启动工程时,加载固定数据到Map中(不用每次访问数据库)

    如下:启动工程时,加载配置文件的用户名和密码到map中, 通过getKeyByValue()获取即可 import java.util.HashMap; import java.util.Map; i ...

  7. PetaPoco在ASP.NET Core 2.2中使用注入方式访问数据库

    .Net Core中一个特别重要的特性就是依赖注入功能,那么我们在使用PetaPoco的时候是否也可以使用依赖注入特性呢? 回答当然是可以的啦.使用方法(两种注入方式)如下 services.AddS ...

  8. web api中访问数据库的内存释放问题

    在使用web api开发微信后台的时候,本来想像MVC一样在controller中申明dbcontext全局变量,其它地方直接使用就可以了,结果调试过程中发现使用dbcontext访问数据库并获取qu ...

  9. Spring Boot中使用JdbcTemplate访问数据库

    本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例. 数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式. ...

随机推荐

  1. centos 6.5 升级php到5.6.17版本

    1. 下载php5.6.17版本:编译安装, ./configure --prefix=/usr/local/php5. --with-config-/etc --with-mysql=/usr/lo ...

  2. .net类中静态方法的继承

    父类中的静态方法,继承的子类能不能调用?一直在这里有疑惑,即使在下面的测试之后,也只是得到了结论,不明原理. class ClsParent { public static void ShowSth( ...

  3. CDH 问题

    1. 时间同步内网开的时候没开UDP防火墙,导致时间不同步 2. 防火墙开的内网不通

  4. 虚拟机安装以及PCL的配置(2)

    那我们无论在虚拟机还是在双系统的Ubuntu环境下都是一样的安装过程 我们使用快捷键“ctrl+alt+T”,来打开一个命令窗口如下图 比如我们在命令窗口下输入ls 我们会看到在主目录下的所有文件 下 ...

  5. Android NDK: Application targets deprecated ABI(s): armeabi Open File

    Error:(81) Android NDK: Application targets deprecated ABI(s): armeabi Error:(82) Android NDK: Suppo ...

  6. Linux 下用管道执行 ps aux | grep 进程ID 来获取CPU与内存占用率

    #include <stdio.h> #include <unistd.h>   int main() {     char caStdOutLine[1024]; // ps ...

  7. C和C++的内存操作小贴士(一):const char*的内存释放问题

    C和C++的内存操作一直是困扰开发人员的老问题,基本概念相信老司机们都很清楚了,在这里就不做过多的描述了,只是把在实际开发中可能遇到的一些小问题的案例列举下,供大家参考.“C和C++的内存操作小贴士” ...

  8. USB学习笔记连载(七):CY7C68013A 无法识别的可能原因

    最近一直在调试视频 采集卡,和PC端连接的是USB接口,使用的是cypress的CY7C68013A-56PVXC. //======================================= ...

  9. 【转】Android开发,按手机上的back键时程序最小化而不退出

    @Override public boolean dispatchKeyEvent(KeyEvent event) { // menuUtils.createTwoDispatcher(event); ...

  10. php的几种算法(转载)

    <? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_sch($ ...