字 符 串)、ROWID( 二 进 制 值)、DATE( 定长 日 期/ 时 间 值)、VARRAW( 变 长 二 进 制 数 据)、RAW( 定 长 二 进制 数 据) 、LONGRAW( 变 长 二 进 制 数 据)、UNSIGNED( 无 符 号 整 数)、ONGVARCHAR( 变 长 字 符 串)、LONGVARRAW( 变 长 二 进 制 数 据)、CHAR( 定 长 字 符串)、CHARZ(C 中 定 长 以NULL 结 尾 的 字 符 串)、MLSLABEL( 变 长 二 进制 数 据)。
在PRO*C 中 不 能 使 用''l'' 或''u'' 作 词 尾或''0x'' 作 词 头 修 饰 常 量; 在SQL 语 句 中 使 用 单 引 号 来 定 义字 符 串, 用 双 引 号 来 定 义 特 殊 的 或 小 写 字 符 的 标 识 符( 如 表 名 等);SQL 语 句 中 不 允 许 使 用C 中 的 寻 址、 间 接、 位逻 辑、 复 合 赋 值、?=、-、++、%、<<、>> 操 作 符 并 且 用NOT、AND、OR、= 代 替!、&&、||、==。
下 面 的 程 序 是 一 个 联 结 数 据 库的PRO*C 源 程 序 例 子。
#include // 声 明SQL 通 讯 区
#include
#include
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR username[20]; // 声 明 宿 主 变 量
VARCHAR password[20];
VARCHAR dbname[20];
EXEC SQL END DECLARE SECTION;
void db_connect()
{
strcpy((char *)username.arr,"SCOTT");
username.len = strlen((char *)username.arr);
strcpy((char *)password.arr,"TIGER");
password.len = strlen((char *)password.arr);
strcpy((char *)dbname.arr,"SUNDB");
dbname.len = strlen((char *)dbname.arr);
EXEC SQL WHENEVER SQLERROR STOP;
// 隐 式 异 常 处 理
EXEC SQL CONNECT :
username IDENTIFIED BY :password USING :dbname;
/*if (sqlca.sqlcode != 0)
// 显 式 异 常 处 理
{
AfxMessageBox("\n 与 Oracle 数 据 库 连 接 失 败!");
return;
}*/
}
在VC 中 使 用PRO*C 时, 先 用PRO*C 编 写所 需 的 操 作 数 据 库 的 子 程 序, 再 运 行PRO*C 预 编 译 程 序把PRO*C 源 程 序 转 成 相应 的CPP 源 程 序, 将 该 程 序 插 入 到 用户 工 程 文 件 中 并 在 需 要 对 插 入 函 数 进 行 调 用 的 模 块中 说 明 函 数, 然 后 就 可以 在 此 模 块 中 调 用 所 需 的 函数。
3. 使 用ODBC 中 间 件 访 问 数 据 库
3.1 ODBC 工 作 原 理
ODBC 是Open Database Connect 即 开 放 数 据 库互 连 的 简 称, 它 是 由Microsoft 公 司 于1991 年 提 出 的 一 个 用于 访 问 数 据 库 的 统 一 界 面 标 准, 是 应 用 程 序 和 数 据 库系 统 之 间 的 中 间 件。 它 通 过 使 用 相 应 应 用 平 台 上 和 所需 数 据 库 对 应的 驱 动 程 序 与 应 用 程 序 的 交 互 来 实 现对 数 据 库 的 操 作,避 免 了 在 应 用 程 序 中 直 接 调 用 与 数据 库 相 关 的 操 作,从 而 提 供 了 数 据 库 的 独 立 性。
ODBC 主 要 由 驱 动 程 序 和 驱 动 程 序管 理 器 组 成。 驱 动 程 序 是 一 个 用 以 支 持ODBC 函 数 调 用 的模 块( 在WIN95 下 通常 是 一 个DLL), 每 个 驱 动 程 序 对 应 于相 应 的 数 据 库, 当应 用 程 序 从 基 于 一 个 数 据 库 系 统 移植 到 另 一 个 时, 只 需 更 改 应 用 程 序 中 由ODBC 管 理 程 序 设定 的 与 相 应 数 据 库 系 统 对 应 的 别 名 即 可。 驱 动 程 序 管理 器( 包 含 在ODBC32.DLL 中) 可 链 接 到 所 有ODBC 应 用 程 序 中,它 负 责 管 理应 用 程 序 中ODBC 函 数 与DLL 中 函 数 的 绑 定。
ODBC 使 用 层 次 的 方 法 来 管 理 数 据库, 在 数 据 库 通 信 结 构 的 每 一 层, 对 可 能 出 现 依 赖 数据 库 产 品 自 身 特 性的 地 方,ODBC 都 引 入 一 个 公 共 接 口 以解 决 潜