分类: 数据库开发技术
2010-01-21 19:45:43
FreeTDS的安装与配置
官方网站:
版本:0.64
地址:
这个软件能够用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 ;下载地址为:下面我就说说安装方法与使用方法吧。
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 安装,配置,测试
官方网站:
版本: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
#include
#include
#include
#include
#include
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;
}