最近要在linux下用c++连接windows下的SQL Server 2005,所以只好用freeTDS了
环境: 系统ubuntu9.04 kernel 2.6.28 gcc 4.3.3 freeTDS 0.91
freeTDS的最新稳定版是0.91,这个可以在官网上下载http://www.freetds.org/ ,也可以在http://download.csdn.net/detail/DLUTXIE/3663528下载
参考文档:在网上查了些资料,但主要还是参考官网上的用户手册http://www.freetds.org/userguide/
下载下来后接下来就要进行解压:
xgy@ubuntu:~/tmp$ tar xvf freetds-0.91.tar.gz
xgy@ubuntu:~/tmp$ cd freetds-0.91/
xgy@ubuntu:~/tmp/freetds-0.91$ ./configure --prefix=/usr/local/freetds0.91 --enable-msdblib --with-tdsver=7.1
--prefix=/usr/local/freetds0.91 :freetds将被安装在/usr/local/freetds0.91目录下
--enable-msdblib :为是允许Microsoft数据库函数库
--with-tdsver=7.1 这个是指定TDS的协议版本,如果不指定只安装的是TDS5.0版的,网上有好多资料这里写的是8.0其实TDS最高的是7.2版的,之后就没再更新了,所以如果写的是8.0,那么安装的也是5.0版的,另外TDS有7.2版的,但在这里最高却只能写到7.1,如果写的是7.2,那么安装的也还是5.0版的,这个可以用./configure --help,输出后可以看到这样的一行:--with-tdsver=VERSION TDS protocol version (4.2/4.6/5.0/7.0/7.1)[5.0]
更详细的的配置情况请参考:http://www.freetds.org/userguide/config.htm
另外说明下:在安装freeTDS之前我没有安装ODBC驱动管理器,也没有安装ODBC驱动。
接下来就是编译、安装:
xgy@ubuntu:~/tmp/freetds-0.91$ make
root@ubuntu:/home/xgy/tmp/freetds-0.91# make install //注意这里是以root用户执行的。
接下来对一些环境变量进行配置
在自己的主目录下编辑.bashrc文件,最该文件的最后一行加上如下内容:
export PATH=$PATH:/usr/local/freetds0.91/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/freetds0.91/lib
然后执行:source .bashrc //这个是使刚才的设置生效
对于LD_LIBRARY_PATH环境变量的配置也可以换成配置文件:/etc/ld.so.conf,这个文件的最后一行加上:/usr/local/freetds0.91/lib
如果改的是/etc/ld.so.conf文件,那么就在root用户下执行:ldconfig,使刚才的配置立即生效。
对于这两个变量的配置如果还有啥疑问,那最好是好好看下这篇文章:http://blog.csdn.net/dlutxie/article/details/6776936这个会让你对linux下的一些路径问题有比较深的理解
网上有资料说还需要配置FREETDS变量,我做过测试,可以不用配置这个变量的。
现在可以看下你安装的情况,执行:tsql -C 输出如下图:
从上图可以看到freeTDS的版本为0.91,freetds.conf配置文件在/usr/local/freetds0.91/etc目录下,TDS的版本为7.1!! 当我开始configure时--with-tdsver选的8.0、7.2这里输出的TDSversion的值是5.0,用这个配置与windows下的SQLServer2005连接时执行命令:
xgy@ubuntu:~$ tsql -H 192.168.13.153 -p1433 -U sa -P 123456 //出现如下图错误:
如果出现”Unexpected EOF from the server”则很有可能就是TDS的版本配置有问题,关于这个的错误及TDS的版本配置可以参考如下文档:
http://www.freetds.org/userguide/choosingtdsprotocol.htm#TAB.PROTOCOL.BY.PRODUCT
http://www.freetds.org/userguide/confirminstall.htm#E.G.BADNAME
接下来对freetds.conf文件进行配置,这个可以参考:http://www.freetds.org/userguide/freetdsconf.htm#TAB.FREETDS.CONF
在这个文件的最后加上如下内容:
[seamus-PC]
host = 192.168.13.153 //SQLServer机器名字或者IP地址
port = 1433
tds version = 7.1
说明:[seamus-PC] 这个括号里的内容可以随便写。
接下来就是测试连接了,执行的命令为:xgy@ubuntu:~$ tsql -H192.168.13.153 -p 1433 -U sa -P 123456
首先执行ping命令,确保两个系统能过通信,如果linux是装在虚拟机中的,那网卡需要要配成NAT模式(两个系统在同一台主机上)、或者桥接模式(linux、windows位于两台主机上)
如果SQL Server2005服务没有启动,则有可能出现如下错误:
另外还要记得启用服务器的TCP/IP协议:开始->开始->Microsoft SQL Server2005->配置工具->SQL Server配置管理器 出现如下图:
启用TCP/IP协议后重启服务即可。
下面这张图片是我没有启用TCP/IP协议同时TDS的版本为5.0时执行
xgy@ubuntu:~$tsql -H 192.168.13.153 -p 1433 -U sa -P 123456 出现的错误:
如果连接成功则会出现一个提示符:>,然后可以输入SQL语句,下面这个是我执行的情况:
student是我数据库pcTest(默认数据库)中的一张表
到此,FreeTDS在linux下安装、并与windows下的SQL Server2005连接成功!!
接下来就是写程序连接数据库, 这个可以参考http://www.freetds.org/userguide/samplecode.htm这里面说得很详细了,是一个很不错的例子。也可以到下面这个链接处下载,例子是一样的,只是我增加了注释:http://download.csdn.net/detail/DLUTXIE/3668501, 另外还可以参考http://msdn.microsoft.com/en-us/library/aa936982(v=SQL.80).aspx