在linux下鏈接MS SQL Server

      在工做中須要在Linux服務器上訪問MS SQL Server數據庫,我立刻就想到了適用ODBC接口進行實現,畢竟它的移植性更好。 數據庫

      首先須要選一種支持MS SQL Server的ODBC驅動,商業的不能考慮,只能考慮開源的,因而,FreeTDS進入了視野,從官網(http://www.freetds.org/)上下載了它的0.91版本的包,在安裝它以前須要安裝libiconv,這個庫用於進行編碼轉換。 服務器

      開始安裝! 網站

1,從unixODBC官網(www.unixodbc.org)下載2.3.2版本 ui

     ./configure --enable-gui=no ; make ; sudo make install this

2,安裝libiconv,./configure ; make ; sudo make install 編碼

3,安裝freetds,./configure --with-tdsver=7.0 --with-unixodbc=/usr/local --with-libiconv-prefix=/usr/local --enable-msdblib spa

  說明,with-tdsver用於指定TDS協議版本,7.0就能支持目前新版本的MS SQL Server,with-unixodbc用於指定 unixODBC的安裝路徑前綴。 .net

      開始配置! 設計

      在/usr/local/etc下有三個關鍵的配置文件,freetds.conf,odbcinst.ini,odbc.ini,分別先說明了三個配置文件的做用,freetds.conf是用於定義具體的驅動信息,包括數據庫地址、端口、協議版本、編碼等,odbcinst.ini用於定義ODBC驅動,odbc.ini用於定義ODBC數據源。 unix

      freetds.conf中定義以下:

[FTDSMSSQLDB]
    host = 192.168.0.1
    port = 1433
    tds version = 7.0
    instance = TKVSDB
    client charset = GBK   ;客戶端的編碼,即你的程序中實際使用的字符編碼,freetds在提交數據時候會自動轉換爲服務器編碼
    initial block size = 1024
    connect timeout = 60
    timeout = 60

    odbcinst.ini中定義以下:

[SQLServer]
Description = v0.91 with protocol v7.0
Driver = /usr/local/lib/libtdsodbc.so
Setup = /usr/local/lib/libtds.so
UsageCount = 1
CPTimeout = 5
CPReuse = 5
FileUsage = 1

     odbc.ini中定義以下:

[TESTDSN]
Driver = SQLServer
Description = MS SQL Server
Servername = FTDSMSSQLDB
Database = TOMDB  ;數據庫名

    顏色標註關聯。

    在程序中,就能夠使用下面的鏈接串進行訪問,以下:UID=sa;PWD=12345678;DSN=TESTDSN。

    在實際使用中,我採用OTL(對ODBC的訪問接口進行了封裝)的API,這樣能使代碼更加簡單一些,在引用otlv4.h頭文件前須要加入下面幾個宏,

#define OTL_ODBC_MSSQL_2008 // Compile OTL 4/ODBC, MS SQL 2005
#define OTL_FREETDS_ODBC_WORKAROUNDS // Enable the FreeTDS / ODBC workarounds for MS SQL
#define OTL_ODBC // Compile OTL 4/ODBC. Uncomment this when used with MS SQL 7.0/ 2000
#define OTL_ODBC_UNIX // Compile OTL 4 / ODBC. Uncomment this when used in Linux / Unix
#define OTL_STL // Turn on STL features

    這樣,就能夠在代碼中使用otl_connect進行訪問了,簡單的實例代碼以下:

const char * dsn_string("UID=sa;PWD=12345678;DSN=TESTDSN");

otl_connect m_conn;

m_conn.rlogon(dsn_string,1);

    後面就能夠進行各類數據庫操做了,詳細請參見OTL的網站http://otl.sourceforge.net/。(固然,你須要設計一個本身的鏈接池,頻繁的打開關閉鏈接是很耗時的)

     但願對你們有幫助!

相關文章
相關標籤/搜索