在unix上使用perl和freetds访问mssql db时遇到问题

时间:2014-10-22 14:24:55

标签: sql-server perl dbi freetds

我尝试使用perl和freetds连接到MS-SQL数据库。我已经使用unix命令行

测试了freetds的安装
`/usr/local/exec/bin/tsql -S myDB -I freetds.conf -U userName -P passw0rd -D DataBase1 -o q < query.sql` 

其中query.sql包含我的sql查询。它运行得非常好。但是当我用perl尝试相同时它会给我以下错误 -

`Your sybase home directory is /opt/sybase. Check the environment variable SYBASE if it is not the one you want! Cannot access file /opt/sybase/config/objectid.dat` 

但正在运行

$ set | grep SYBASE收益SYBASE=/usr/fsf/freetds

以下是我的perl代码:

#!/usr/bin/perl5/core/5.8.8/exec/bin/perl

use lib qw(/usr/perl5/core/5.8.8/exec/lib);
use lib qw(/usr/perl5/DBI/1.607/exec/5.8/lib/perl5);
use lib qw(/usr/perl5/DBD-Sybase/1.09/exec/5.8/lib/perl5);

use DBI;
use DBD::Sybase;

my $user   = "userName";
my $passwd = "passw0rd";
my $server = "myDB";

`export SYBASE=/usr/fsf/freetds`;
`export LD_LIBRARY_PATH=/usr/fsf/freetds/0.82/exec/lib`;
`export FREETDSCONF=./freetds.conf`;

my $dbh = DBI->connect("DBD:Sybase:server=$server", $user, $passwd, {PrintError => 0});

unless ($dbh) {
    die "ERROR: Failed to connect to server ($server).\nERROR MESSAGE: $DBI::errstr";
} 
else {
    print "\n";
    print "Successful Connection.";
}

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

司机的路径说5.10。您可能已经下载了错误版本的perl的驱动程序。更新到5.10.1或获取5.8.8的驱动程序。

答案 1 :(得分:1)

我已经弄清楚了。那么,在安装DBD-Sybase之前,首先需要设置SYBASE环境变量。当Your sybase home directory is /opt/sybase应该指向freetds安装位置时,这就是{{1}}背后的原因。参考:http://www.idevelopment.info/data/SQLServer/DBA_tips/Programming/PROG_4.shtml#Install%20DBD-Sybase