使用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. Sql Over的用法

    转载自:http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html OVER(PARTITION BY)函数介绍 开窗函数 Oracle从 ...

  2. 问题解决:bash: fork: retry: Resource temporarily unavailable

    linux报错: bash: fork: retry: Resource temporarily unavailable 不管是执行什么 登陆不了服务器The server refused to st ...

  3. 简单防范SYN_RECV攻击

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 这条语句返回结果如下 TIME_WAIT FIN_WAIT1 ...

  4. ssh 断开解决办法

    SSH连接总是隔一段时间没有输入时就断开,解决办法如下: 服务端配置sudo vi /etc/ssh/sshd_configClientAliveInterval 60     #服务端主动向客户端请 ...

  5. PDF文件分割和合并

    今天自己用C#实现了下PDF文件的分割和合并,大家可以试用一下. 代码和使用说明在这里:https://github.com/cserspring/pdf_split_merge 有什么意见,大家可以 ...

  6. FileZilla等软件搭建ftp服务器

    一.常用的几款ftp服务器软件介绍 1.1 Server-U Serv-U是一种被广泛运用的FTP服务器端软件,支持3x/9x/ME/NT/2K/2000/xp等全Windows系列.可以设定多个FT ...

  7. C++ 拷贝构造函数之const关键字

    class Complex { public: //拷贝构造函数1 Complex(const Complex &c); //拷贝构造函数2 Complex(Complex &c); ...

  8. Qt 菜鸟的坑 QAbstractSocket::isValid()

    我曾经多次在 Qt socket 编程中使用 tcpSocket.isValid 来判断我当前的连接是否可用,最近写程序时才发现此法并不妥当. bool QAbstractSocket::isVali ...

  9. 关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器

    对于多量的.复杂的.有规律的控制器使用代码生成 动画状态代码控制 1:每个动画状态,比如进入状态,离开状态, 等都有可能需要代码来参与和处理,比如,进入这个动画单元后做哪些事情,来开这个动画单元后做哪 ...

  10. (笔记)Mysql命令drop database:删除数据库

    drop命令用于删除数据库. drop命令格式:drop database <数据库名>; 例如,删除名为 xhkdb的数据库:mysql> drop database xhkdb; ...