Sql server 在unix上使用perl和freetds访问mssql数据库时出现问题

Sql server 在unix上使用perl和freetds访问mssql数据库时出现问题,sql-server,perl,dbi,freetds,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` 但是跑步 $set | grep SYBASE产生SYBASE=/usr/fsf/freetds 下面是我的perl代码: #!/usr/bin/perl5/cor

我正在尝试使用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` 
但是跑步

$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.";
}

非常感谢任何帮助

到您的驱动程序的路径显示为5.10。您可能下载了错误版本的perl驱动程序。要么更新到5.10.1,要么获取5.8.8的驱动程序。

我已经找到了答案。在安装DBD SYBASE之前,首先需要设置SYBASE环境变量。这就是为什么当sybase主目录指向freetds安装位置时,
的sybase主目录是/opt/sybase
。Ref:

哪个版本的perl“perl-v”?驱动程序路径是5.10。您可能下载了错误版本的perl驱动程序。更新到5.10.1或获取5.8.8的驱动程序。谢谢@AKHolland。我已经改正了。这个问题已经解决了,但现在它显示,
您的sybase主目录是/opt/sybase。如果环境变量SYBASE不是您想要的,请检查它!无法访问文件/opt/sybase/config/objectid.dat
但运行
$set | grep sybase
会产生
sybase=/efs/dist/fsf/freetds
我是否遗漏了什么?我不确定。。。不过,我将把我之前的评论作为一个答案,对任何遇到这种情况的人来说。
#!/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.";
}