当前位置:Linux教程 - Php - 在Linux 下 访 问MS SQL Server 数 据 库(转载)

在Linux 下 访 问MS SQL Server 数 据 库(转载)

宁 波 保 税 区 官 委 会 计 算 中 心   董 保 华

---- 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 外, 并 不 需 要 其 他 软 件( 具