Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1332984
  • 博文数量: 436
  • 博客积分: 7854
  • 博客等级: 少将
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-18 16:30
文章分类

全部博文(436)

文章存档

2013年(2)

2012年(56)

2011年(70)

2010年(308)

分类: 数据库开发技术

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;
}


编译: gcc -o testsybase testsybase.c ./src/dblib/.libs/libsybdb.a
阅读(688) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~