在Linux 下 訪 問MS SQL Server 數 據 庫(轉載)
2024-08-28 00:23:35
供稿:網友
寧 波 保 稅 區 官 委 會 計 算 中 心 董 保 華
---- 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)。