ODBC API的声明语句

转载 2006年06月24日 18:52:00

---- 开 放 数 据 库 互 连(ODBC) 已 经 成 为Client /Server 数 据 库 应 用 系 统 中 访 问 远 程 数 据 库 的 一 个 标 准。 做 为 强 大 的 前 端 开 发 工 具,MS Visual Basic 为 开 发 者 提 供 了 多 种 访 问ODBC 数 据 源 的 途 径, 如JET 数 据 库 引 擎、ODBC API 函 数、RDO 接 口 等。 比 较 而 言, 直 接 使 用ODBC API 函 数 的 编 程 难 度 最 大, 但 由 此 获 得 的 存 取 数 据 库 的 性 能 也 是 最 佳。 诚 然,VB 4.0 企 业 版 提 供 的RDO 接 口 的 性 能 已 经 接 近ODBC API, 但 是 遗 憾 的 是, 这 个 接 口 只 能 在32 位Windows 环 境 中 运 行, 而ODBC API 函 数 则 没 有 这 个 限 制。
---- ODBC API 函 数 的 声 明 方 法
---- 与 使 用 其 它 动 态 库 函 数 一 样, 在VB 中 使 用ODBC API 函 数 之 前, 必 须 事 先 声 明 将 要 使 用 的 函 数、 常 量 和 数 据 结 构。ODBC API 函 数 驻 留 在ODBC 运 行 动 态 库ODBC.DLL(16 位) 或ODBC32.DLL(32 位) 中, 该 动 态 库 位 于Windows 子 目 录system 中。 通 常 做 法 是 在VB 项 目 中 单 独 使 用 一 个 模 块 文 件, 然 后 将ODBC API 声 明 语 句 加 入 其 中, 如 下 所 示, 就 是 本 文 实 例 中 使 用 的 模 块 文 件module1.bas 的 内 容:

Declare Function SQLAllocEnv Lib "odbc32.dll" (phenv&) As Integer

Declare Function SQLAllocConnect Lib "odbc32.dll" (ByVal henv&, phdbc&) As Integer

Declare Function SQLAllocStmt Lib "odbc32.dll" (ByVal hdbc&, phstmt&) As Integer

Declare Function SQLConnect Lib "odbc32.dll" (ByVal hdbc&, ByVal szDSN$, ByVal cbDSN%, ByVal szUID$, ByVal cbUID%,ByVal szAuthStr$, ByVal cbAuthStr%) As Integer

Declare Function SQLColAttributesString Lib "odbc32.dll" Alias "SQLColAttributes" (ByVal hstmt&, ByVal icol%, ByVal fDescType%,ByVal rgbDesc As String, ByVal cbDescMax%, pcbDesc%, pfDesc&) As Integer

Declare Function SQLDisconnect Lib "odbc32.dll" (ByVal hdbc&) As Integer

Declare Function SQLExecDirect Lib "odbc32.dll" (ByVal hstmt&, ByVal szSqlStr$, ByVal cbSqlStr&) As Integer

Declare Function SQLFetch Lib "odbc32.dll" (ByVal hstmt&) As Integer

Declare Function SQLFreeConnect Lib "odbc32.dll" (ByVal hdbc&) As Integer

Declare Function SQLFreeEnv Lib "odbc32.dll" (ByVal henv&) As Integer

Declare Function SQLFreeStmt Lib "odbc32.dll" (ByVal hstmt&, ByVal fOption%) As Integer

Declare Function SQLGetData Lib "odbc32.dll" (ByVal hstmt&, ByVal icol%, ByVal fCType%, ByVal rgbValue As String, ByVal cbValueMax&, pcbValue&) As Integer

Declare Function SQLNumResultCols Lib "odbc32.dll" (ByVal hstmt&, pccol%) As Integer

Public Const SQL_C_CHAR As Long = 1

Public Const SQL_COLUMN_LABEL As Long = 18

Public Const SQL_DROP As Long = 1

Public Const SQL_ERROR As Long = -1

Public Const SQL_NO_DATA_FOUND As Long = 100

Public Const SQL_SUCCESS As Long = 0

Public Const SQL_ATTR_MAX_LENGTH As Long = 100


---- 需 要 说 明 的 是, 在 函 数 声 明 时, 应 该 根 据 程 序 的 运 行 环 境 选 择 相 应 的 动 态 库。 在VB 子 目 录samples/remauto/db_odbc 中 有 两 个 正 文 文 件ODBC16.TXT 和ODBC32.TXT, 分 别 存 有 所 有16 位 和32 位ODBC API 函 数、 常 量 和 数 据 结 构 的 声 明 语 句, 编 程 时 可 以 从 中 拷 贝 所 需 的 声 明 语 句。
---- 使 用ODBC API 的 编 程 方 法
---- 在VB 中 调 用ODBC API 函 数 访 问ODBC 数 据 库, 代 码 编 制 一 般 是 按 照 下 列 过 程 进 行 的:
---- 一、 初 始 化ODBC
---- 在 这 个 过 程 中, 应 用 程 序 将 通 过 调 用SQLAlloEnv 函 数 初 始 化ODBC 接 口, 获 取ODBC 环 境 句 柄。ODBC 环 境 句 柄 是 其 它 所 有ODBC 资 源 句 柄 的 父 句 柄, 因 此 无 论 程 序 将 建 立 多 少 个ODBC 连 接, 这 个 过 程 只 需 执 行 一 次 即 可。 例 如:

Dim rc As Integer 'ODBC函数的返回码
Dim henv As Long 'ODBC环境句柄
rc = SQLAllocEnv(henv) '获取ODBC环境句柄

---- 二、 与ODBC 数 据 源 建 立 连 接
---- 这 个 过 程 由 下 列 两 个 步 骤 组 成:
---- 1、 调 用SQLAllocConnect 函 数 获 取 连 接 句 柄。 例 如:

Dim hdbc As Long '连接句柄
rc = SQLAllocConnect(henv, hdbc) '获取连接句柄

---- 2、 建 立 连 接。 这 个 步 骤 可 以 通 过 多 种 方 法 实 现, 最 简 单 直 观 的 方 法 是 调 用SQLConnect 函 数。 例 如:

Dim DSN As String, UID As String, PWD As String
DSN = "DataSourceName" 'ODBC数据源名称
UID = "UserID" '用户帐号
PWD = "Password" '用户口令
rc = SQLConnect(hdbc, DSN, Len(DSN), UID,
Len(UID), PWD, Len(PWD)) '建立连接

---- 三、 存 取 数 据
---- 用 户 对ODBC 数 据 源 的 存 取 操 作, 都 是 通 过SQL 语 句 实 现 的。 在 这 个 过 程 中, 应 用 程 序 将 通 过 连 接 向ODBC 数 据 库 提 交SQL 语 句, 以 完 成 用 户 请 求 的 操 作。 具 体 步 骤 如 下:
---- 1、 调 用SQLAllocStmt 函 数 获 取 语 句 句 柄。 例 如:

Dim hstmt As Long
rc = SQLAllocStmt(hdbc, hstmt)

---- 2、 执 行SQL 语 句。 执 行SQL 语 句 的 方 法 比 较 多, 最 简 单 明 了 的 方 法 是 调 用SQLAllocStmt 函 数, 例 如:

Dim SQLstmt As String
SQLstmt = "SELECT * FROM authors"
rc = SQLExecDirect(hstmt, SQLstmt, Len(SQLstmt))

---- 四、 检 索 结 果 集
---- 如 果SQL 语 句 被 顺 利 提 交 并 正 确 执 行, 那 么 就 会 产 生 一 个 结 果 集。 检 索 结 果 集 的 方 法 有 很 多, 最 简 单 最 直 接 的 方 法 是 调 用SQLFetch 和SQLGetData 函 数。SQLFetch 函 数 的 功 能 是 将 结 果 集 的 当 前 记 录 指 针 移 至 下 一 个 记 录,SQLGetData 函 数 的 功 能 是 提 取 结 果 集 中 当 前 记 录 的 某 个 字 段 值。 通 常 可 以 采 用 一 个 循 环 以 提 取 结 果 集 中 所 有 记 录 的 所 有 字 段 值, 该 循 环 重 复 执 行SQLFetch 和SQLGetData 函 数, 直 至SQLFetch 函 数 返 回SQL_NO_DATA_FOUND, 这 表 示 已 经 到 达 结 果 集 的 末 尾。

Dim ColVal As String * 225
ColVal = String(255, 0)
Do Until SQLFetch(hstmt) = SQL_NO_DATA_FOUND
rc = SQLGetData(hstmt, i, SQL_C_CHAR, ColVal,
Len(ColVal), SQL_NULL_DATA)
Loop

---- 五、 结 束 应 用 程 序
---- 在 应 用 程 序 完 成 数 据 库 操 作, 退 出 运 行 之 前, 必 须 释 放 程 序 中 使 用 的 系 统 资 源。 这 些 系 统 资 源 包 括: 语 句 句 柄、 连 接 句 柄 和ODBC 环 境 句 柄。 完 成 这 个 过 程 的 步 骤 如 下:
---- 1、 调 用SQLFreeStmt 函 数 释 放 语 句 句 柄 及 其 相 关 的 系 统 资 源。 例 如:

rc = SQLFreeStmt(hstmt, SQL_DROP)

---- 2、 调 用SQLDisconnect 函 数 关 闭 连 接。 例 如:

rc = SQLDisconnect(hdbc)

---- 3、 调 用SQLFreeConnect 函 数 释 放 连 接 句 柄 及 其 相 关 的 系 统 资 源。 例 如:

rc = SQLFreeConnect(hdbc)

---- 4、 调 用SQLFreeEnv 函 数 释 放 环 境 句 柄 及 其 相 关 的 系 统 资 源, 停 止ODBC 操 作。 例 如:

rc = SQLFreeEnv(henv)

---- 此 外, 在 编 制 程 序 时 还 有 一 个 需 要 重 点 考 虑 的 问 题, 这 就 是 错 误 处 理。 所 有ODBC API 函 数, 若 在 执 行 期 间 发 生 错 误, 都 将 返 回 一 个 标 准 错 误 代 码SQL_ERROR。 一 般 来 讲, 在 每 次 调 用ODBC API 函 数 之 后, 都 应 该 检 查 该 函 数 返 回 值, 确 定 该 函 数 是 否 成 功 地 执 行, 再 决 定 是 否 继 续 后 续 过 程。 而 详 细 的 错 误 信 息, 可 以 调 用SQLError 函 数 获 得。SQLError 函 数 将 返 回 下 列 信 息: 标 准 的ODBC 错 误 状 态 码
ODBC 数 据 源 提 供 的 内 部 错 误 编 码
错 误 信 息 串

相关文章推荐

[疯狂Java]JDBC:JDBC/ODBC基本概念、MySQL基本命令、SQL语句基本概念

1. JDBC基本概念:     1) 即Java Database Connectivity的简称,即Java数据库连接;     2) 它是一组API,提供连接数据库、执行SQL查询并返回查询结果...

基于ODBC API实现对数据库的访问

源程序:http://download.csdn.net/user/kissyfish Visual C++提供了多种多样的数据库访问技术,ODBC API,MFC ODBC,DAO,OLEDB...

api声明语法

  • 2015-06-29 17:16
  • 204KB
  • 下载

API函数声明说明

  • 2002-10-07 00:00
  • 31KB
  • 下载

odbc 的 c api实现简单的select*结果printf 输出

1.使用C语言来操作SQL SERVER数据库,采用ODBC开放式数据库连接进行数据的添加,修改,删除,查询等操作。 step1:安装 sql server 2008 (各种百度安装成功了)  s...

猜sql server密码用sqlconnection的话cpu100%,内存只升不降。最后直接用odbc api解决。

猜sql server密码干什么。玩过黑克得都知道。用c#做个猜sql server密码的程序,听起来挺简单吧。sqlconnection类,构造连接字符串,然后try open()方法,如果没有ca...
  • laotse
  • laotse
  • 2011-04-24 23:46
  • 1882

在程序中用到的ODBC API 函数

本文转自                         &...

ODBC API 学习总结

ODBC 编程API http://blog.csdn.net/bichenggui/article/details/5601381 转的ODBC API函数详细说明。 看了一遍,没有问题。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)