在Linux下访问MS SQL Server数据库
2024-08-31 00:48:45
供稿:网友
---- linux 作 为 一 个 免 费 的unix 类 操 作 系 统, 以 其 开 放 性 源 代 码、 多 任 务、x window 等 特 点 为 众 多 的 用 户 所 采 用, 并 有 很 多 企 业 采 用linux 来 作 为 其 内 部 网 的 全 功 能 服 务 器(www,ftp,email、dns)。 企 业 的 内 部 网 不 仅 要 提 供 文 本 信 息 的 访 问, 还 要 能 提 供 对 企 业 关 系 数 据 库 中 的 信 息 的 访 问。sql server 以 其 低 成 本、 性 能 高 以 及 与nt 的 有 效 集 成 等 特 性 为 许 多 企 业 所 采 用, 但microsoft 不 提 供 其unix 下 的 客 户 端, 为 这 类 应 用 带 来 了 困 难。 本 文 则 提 出 了 这 一 问 题 的 解 决 方 案。
安 装sybase 客 户 端
---- 首 先 从microsoft sql server 和sybase sql server 的 关 系 说 起。 两 公 司 曾 共 同 开 发os/2 上 的 数 据 库 sql server for os/2, 此 后 两 公 司 又 独 立 开 发 升 级 系 统,sybase 的 客 户 端 可 以 访 问microsoft sql server。
---- 和 其 他 数 据 库 公 司 相 比, 可 以 说sybase 公 司 对linux 是 最 有 善 意 的, 它 虽 不 提 供linux 下 的sql server, 但 提 供 了 免 费 的ct -lib 的 客 户 端, 这 也 可 能 是 许 多it 管 理 人 员 在 为 公 司 数 据 库 选 型 时 不 再 考 虑oracle 或informix 的 理 由 之 一。 当 然 现 在 情 况 有 所 改 变。
----sybase 公 司 发 布 的openclient for linux 是a.out 格 式 的, 在 互 联 网 上 有 人 将 其 转 化 为elf 和 动 态 链 接 的elf 格 式, 可 从 下 列 地 址 上 寻 找 下 载:http://www.mbay.net/ ~mpeppler。 最 好 同 时 下 载 两 个 版 本, 正 常 使 用 时 采 用 动 态 链 接 的 版 本, 但 有 的 程 序 在 编 译 时 可 能 需 要 一 个 库(libblk.a), 只 在elf 里 面 包 含。
---- 下 载 以 后, 键 入 如 下 命 令 展 开( 假 设 当 前 目 录 是/usr/tmp):
----tar zxvf linux elf dynamic tar.gz
---- 然 后 将 其 移 至/usr/local 目 录:
----mv sybase /usr/local
---- 编 译 和 使 用sybase 客 户 端 需 要 进 行 如 下 的 设 置:
----1 . interface 文 件 举 例 如 下:
----mssql
----query tcp ether mysql 1433
---- 其 中:
mssql 是 客 户 端 使 用 的 服 务 器 名, 以 后 引 用mssql 即 可;
mysql 是 服 务 器 的 地 址 或 名 字, 如 果 是 名 字, 则 系 统 能 够 查 到 其ip 地 址;
1433 是sql server 的 端 口 号,microsoft sql server 的 缺 省 值 是1433,sybase 是5000。
----2 . sybase 环 境 变 量, 内 容 是sybase 客 户 端 所 在 的 目 录:
----export sybase=/usr/local/sybase
----3 . 如 果 编 译sybase 客 户 端 中 的 例 子, 则 还 要 设 置 环 境 变 量sybplatform:
----export sybplatform=linux
---- 并 且 修 改 其 头 文 件 中 关 于 服 务 器 名 称 及 用 户 名 和 口 令 的 描 述。
使 用sqsh 界 面 访 问sql server
----sybase 客 户 端 提 供 了xisql 工 具, 但 更 多 的 人 使 用 的 是sqsh,sqsh 是sqshell 的 缩 写, 是 改 进 了 的isql, 可 从 下 列 地 址 下 载:http://www.voicenet.com/ ~gray/。 当 前 的 最 新 版 本 是1.6.0。 假 设 下 载 后 的 文 件 放 在/usr/tmp 目 录 下:
----tar zxvf sqsq 1.6.0 tar.gz
----cd sqsh 1.6.0
----./configure
----make;make install
---- 然 后, 将 生 成 的 可 执 行 文 件sqsh 安 装 到/usr/local/bin/ 目 录 下。
----sqsh 的 使 用 如 下:
---- # sqsh - -uusername - -ppassword - -sservername
---- 其 中username 和password 是 用 户 名 和 口 令,servername 是 在interface 文 件 中 定 义 的 服 务 器 名( 如 例 子 中 的mssql)。
----sqsh 是 交 互 式 的 命 令 行 界 面, 命 令 用 输 入go 来 执 行, 命 令 如 果 较 长 可 直 接 分 成 几 行 书 写, 以 回 车 换 行 即 可。
---- 如 下 是 一 个 例 子:
----1> use pubs
----2> go
----1> select * from authors
----2> go 采 用ct -lib 编 写 应 用 程 序
---- 由 于sybase 的linux 客 户 端 不 提 供db -library, 所 以 应 采 用ct -library 来 编 写 应 用 程 序, 采 用ct -library 编 写 应 用 程 序 可 参 考 例 子, 详 细 的 编 程 说 明 可 以 参 考sybase 的 说 明。 利 用sybperl 编 写 应 用 程 序
----sybperl 是sybase 的perl 扩 展, 可 利 用perl 语 言 来 访 问sql server, 或 者 编 写cgi 程 序。
----sybperl 可 从 下 列 地 址 取 得http://www.mbay.net/ ~mpeppler。 当 前 的 最 新 版 本 是2.9.5。
---- 取 得sybperl 的 源 代 码 展 开 以 后, 需 要 修 改 一 下config 文 件, 以 下 是 几 个 参 数:
---- 下 一 个 要 修 改 的 文 件 是pwd, 这 是 用 来 进 行 测 试 的, 将 其 中 的 服 务 器 名、 用 户 名、 用 户 口 令 设 置 成 自 己 的 配 置 即 可。 然 后 进 行 编 译:
----perl makefile.pl
----make; make test; make install
---- 安 装 成 功 以 后, 即 可 使 用sybperl 进 行 编 程。 下 面 是 一 个 简 单 的 例 子。
#!/usr/bin/perl
use sybase::ctlib;
$dbh=new sybase::ctlib 'sa','','mssql';
$dbh ->ct_execute("select au_id, au_lname,
au_fname from pubs.dbo.authors");
while( $dbh ->ct_results( $restype) == cs_succeed) {
next unless $dbh ->ct_fetchable( $restype);
while(( $au_id, $au_lname, $au_fname) = $dbh ->ct_fetch){
print " $au_id - $au_lname au_fname/n";
}
}
----可 以 看 出, 短 短 几 行 语 句, 就 可 以 完 成 对 数 据 库 的 操 作。
----以 上 从 几 个 方 面 对 在linux 下 访 问ms sql server 数 据 库 进 行 了 说 明, 介 绍 了 基 本 的api 编 程、sqsh 命 令 行 访 问、perl 访 问。 其 实, 在linux 下 还 可 采 用 其 他 方 式 进 行 访 问, 如 采 用 第 四 级 的jdbc 进 行 访 问, 这 时 除 了java 和jdbc 外, 并 不 需 要 其 他 软 件( 具 体 信 息 可 访 问http://www.connectsw.com)。