Linux下通過freetds連接MSSQL數據庫解決方案

FreeTDS的安裝與配置

官方網站:http://www.freetds.org
版本:0.64
下載地址:http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
這個軟件能夠用Linux和Unix連接MS SQLServer和Sybase數據庫。

二、安裝與配置

2.1編譯安裝freetds:

$ tar zxvf freetds-stable.tgz(解壓)
$ ./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib
$ make
$ make install

解釋:
安裝freetds到目錄/usr/local/freetds:--prefix=/usr/local/freetds
支持MSSQL2000:--with-tdsver=8.0 --enable-msdblib

//2.2配置FreeTds的庫文件

//將freetds的庫文件所在路徑配置到LD_LIBRARY_PATH參數中:

//$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/freetds/lib/:


設置bin路徑

$vi /root/.bashrc

添加內容如下:

export FREETDS=/usr/local/freetds
export $PATH="$PATH:$FREETDS/bin"

注意: freetds的壓縮包不能放到VM的共享目錄下解壓和編譯安裝

freeTDS 安裝過程:
假定FreeTDS的源代碼目錄爲。
假定FreeTDS的安裝目錄爲,默認爲/usr/local/src。
下面配置FreeTDS,--prefix爲設置FreeTDS的安裝目錄,--with-tdsver是設置TDS版本,--enable-msdblib爲是否允許Microsoft數據庫函數庫:
cd
./configure --prefix= --with-tdsver=8.0 --enable-msdblib --enable-dbmfix --with-gnu-ld --enable-shared --enable-static
編譯並安裝:
make
make install
cd ..
FreeTDS默認安裝在/usr/local/freetds目錄當中,庫文件在相應的lib目錄下。
編輯/etc/ld.so.conf,在其中插入一行:
/usr/local/freetds/lib
然後運行以下指令使更改生效:
ldconfig

Liunx下訪問SQL2000的好工具!

相 信玩Liunx系統的同志們不會不知道FreeTDS這個工具吧。這個東東最大好處就是能夠在Liunx下訪問Sybase及MS SQL;FreeTDS的作者在其網站上稱能在Unix下訪問,不過我沒看到有Unix下版本的下載。現在For Linux的最新版本爲:freetds-0.63 ;下載地址爲:http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-0.63.tar.gz 下面我就說說安裝方法與使用方法吧。
1.下載freetds-0.63。一定要下載063版本,好面我將會告訴大家0.63版本的好處。
2.將freetds-0.63.tar.gz ftp上Liunx任意目錄。解包,進入解包後的文件夾內。更換到root用戶(最好是root權限,其他帳號在編譯時會有權限問題)
3.下面配置FreeTDS,FreeTDS參數先說明一下:--prefix爲設置FreeTDS的安裝目錄,--with-tdsver是設置TDS版本,--enable-msdblib爲是否允許Microsoft數據庫函數庫。
現在我們在目錄下鍵入:
./configure --prefix= --with-tdsver=8.0 --enable-msdblib --enable-dbmfix --with-gnu-ld --enable-shared --enable-static
注意:一定要 tdsver=8.0 才支持MS SQL2000,tdsver=7.0支持的是MS SQL7
接着編譯並安裝:
make
make install
這樣基本OK,不夠我們還有配置下/etc/freetds.conf 文件,按照文件幫助加入自己MSSQL的IP及其配置信息。下面,我列出我的freetds.conf MS 2000 配置信息。

# A typical Microsoft SQL Server 2000 configuration
[IBMSQL]
host = 10.10.10.211
port =1433
tds version 8.0
呵呵,簡單吧,其實就是把你的 SQL2000 數據庫 及1433 端口(MS SQL均爲1433端口)與IBMSQL這個符號名捆綁一下。當然不配置這些參數其實也可以訪問MS SQL的。

4.在任意目錄鍵入:
tsql -H MSSQL服務器服務IP -p 1433 -U MSSQL服務器登陸帳號 -P MSSQL服務器登陸密碼
例如:tsql -H10.10.10.211 -p1433 -Usa -P123456
或者:tsql -SIBMSQL -p1433 -Usa -P123456
剩下如果輸出:> 則代表你成功了。準備輸入 select * from 數據名.dbo.表明 吧 ;然後 go
當然還有BCP工具,使用freebcp ,大家可以參考幫助,我不多說了,也非常好用。
5.總結:剛開始我安裝好freetds後老是訪問不了MSSQL,所以大家的MSSQL2000 一定要升級到
SP4(sp3估計也可以);最大的喜訊是:freetds-0.63 支持中文了。可以查詢出中文信息,而不是使用?號代替了。呵呵,爽一個字了的。
對了,我用它訪問我的Linux下Sybase數據庫,也非不錯。

1 概述
在 linux下連接MSSQL是一件很痛苦的事,因爲微軟同志沒有提供任何接口給開發人員,還好,MSSQL是從Sybase衍生出來的,FreeTDS是 一個數據庫底層的驅動程序,用freetds的庫進行開發是一件很方便的事。freetds可以連接sybase和ms sql server數據庫。
2 安裝,配置,測試
官方網站:http://www.freetds.org
版本:0.64
$ tar -zxvf freetds-stable.tgz
$ ./configure --prefix=/usr/local/freetds
$ make
$ su root
$ make install
$ tsql -H 2.2.2.2 -p 1433 -U test -P test
tsql說明:
H:數據庫IP
p:數據庫端口
U:用戶名
P:密碼
3 linux下C/C++開發
3.1 利用freetds自帶的程序開發
位置在freetds-0.64/src/apps
$make clean
$make
3.2 利用freetds庫快速開發
testsybase.c

代碼:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h> 
 
#include <sybfront.h>
#include <sybdb.h>
 
 
 
int main(void)
{
       char szUsername[32] = "test";
       char szPassword[32] = "test";
       char szDBName[32] = "test";
       char szServer[32] = "2.2.2.2:1433";
 
       //初始化db-library
       dbinit();
       //連接數據庫
       LOGINREC *loginrec = dblogin();
       DBSETLUSER(loginrec, szUsername);       
       DBSETLPWD(loginrec, szPassword);
       DBPROCESS *dbprocess = dbopen(loginrec, szServer);
       if(dbprocess == FAIL){
              printf("ASB>>      Conect MS SQL SERVER fail       /n");
              return 0;
 
       }else{
              printf("ASB>>      ConnectEMS conect MS SQL SERVER success/n");
       }
       if(dbuse(dbprocess, szDBName) == FAIL){
              printf("ASB>>      Open database name fail/n");
       }else{
              printf("ASB>>      Open database name success/n");
       }
       
       //查詢數據庫
       dbcmd(dbprocess, "select ID,BeginTime,Description from Alarms");
       if(dbsqlexec(dbprocess) == FAIL){
              printf("ASB>>      Query Alarms table error/n");     
       }
       
       DBINT result_code;
       char szID[1024];
       char szBeginTime[1024];
       char szDescription[1024];
       int rows = 0;
       while ((result_code = dbresults(dbprocess)) != NO_MORE_RESULTS){
              if (result_code == SUCCEED){
                     dbbind(dbprocess, 1, CHARBIND, (DBINT)0, (BYTE*)szID);
                     dbbind(dbprocess, 2, CHARBIND, (DBCHAR)0, (BYTE*)szBeginTime);
                     dbbind(dbprocess, 3, CHARBIND, (DBCHAR)0, (BYTE*)szDescription);
 
                     while (dbnextrow(dbprocess) != NO_MORE_ROWS){                        
                            printf("ASB>>             ID=%s/n", szID);
                            printf("ASB>>             szAid=%s/n", szBeginTime);
                            printf("ASB>>             szBeginTime=%s/n", szDescription);
                     }
              }
       }
       //關閉數據庫連接
       dbclose(dbprocess);
       
       return 0;
}


編譯: gcc -o testsybase testsybase.c ./src/dblib/.libs/libsybdb.a

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章