我有一个连接到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连接到数据库。
答案 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 );