连接到Sybase DB时出错

时间:2011-12-20 12:36:11

标签: perl sybase

我有一个连接到Sybase数据库服务器的perl脚本(服务器的别名 - MYDATABASESERVER)。我的代码是:

exec perl -w -x
#!perl

use Sybase::DBlib;
use Mail::Sendmail;
use Env qw(DSQUERY DBNAME DBUSER DBPASSWD);

$dbh = &execRemoteSQL($sql_text);

sub execRemoteSQL
{
my ($sqlText) = @_;
my ( $ret, $retS );
local ($dbh) = undef;


$dbh = new Sybase::DBlib $DBUSER, $DBPASSWD, $DSQUERY;
if ( !(defined $dbh) )
{
    print STDERR "execRemoteSQL(): Failed To Create DB Handle for :\n";
            print STDERR " SERVER    = $DSQUERY\n";
            print STDERR " DATABSE   = $DBNAME\n";
    exit(-1);
}
.
.
.

当我提供服务器名称为MYDATABASESERVER(DSQUERY的值)时,我在If语句中收到错误,但它正确连接到名为MYDB的服务器。

想知道服务器名称长度是否有任何限制,或者是否由于其他原因。

这是我得到的错误消息:

DB-Library error:
        Unknown host machine name.
execRemoteSQL(): Failed To Create DB Handle for :
 SERVER    = MYDATABASESERVER
 DATABSE   = my_db

服务器别名已正确定义,因为我可以使用isql连接到数据库。

2 个答案:

答案 0 :(得分:1)

我不认为服务器名称的长度太长了。

您的确切错误消息是什么?

可能在Sybase特定的“interfaces”配置文件中未正确定义MYDATABASESERVER服务器别名。它驻留在dir $ SYBASE / $ SYBASE_OCS中。它对MYDATABASESERVER有什么看法(应该是2行)?

无论如何: 不要使用DBLib,它真的很旧并且已弃用。我认为Sybperl / DBLib和DBD :: Sybase模块的维护者仍然只支持Sybase :: DBLib代码,以便让必须处理旧程序的客户端程序员更容易生活,并使旧版应用程序与新版本兼容Sybase ASE。

您应该使用DBI和DBD :: Sybase。互联网上99%的perl / sybase代码都使用DBI。

答案 1 :(得分:0)

您可以尝试使用以下语法吗? :

$dbh = Sybase::DBlib->new( $DBUSER, $DBPASSWD, $DSQUERY );