在工做中须要在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/。(固然,你须要设计一个本身的链接池,频繁的打开关闭链接是很耗时的)
但愿对你们有帮助!