在Linux下訪問MS SQL Server資料庫(轉)
來源:互聯網
上載者:User
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 外, 並 不 需 要 其 他 軟 件( 具 體 信 息 可 訪 問http://www.connectsw.com)。