我有一个连接到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连接到数据库。
发布于 2011-12-21 06:55:44
我不认为这里的服务器名称太长。
您的确切错误消息是什么?
可能在特定于Sybase的“接口”配置文件中没有正确定义MYDATABASESERVER服务器别名。它位于目录$SYBASE/$SYBASE_OCS中。关于MYDATABASESERVER (应该是2行),它说了什么?
无论如何:不要使用DBLib,它真的很旧而且已经过时了。我认为Sybperl/DBLib和DBD::Sybase模块的维护者仍然只支持Sybase::DBLib代码,以使必须处理旧程序的客户端程序员的工作更轻松,并使遗留应用程序与Sybase ASE的新版本兼容。
您应该改用DBI和DBD::Sybase。互联网上99%的perl/sybase代码使用DBI。
发布于 2011-12-20 22:54:18
您可以尝试以下语法吗?
$dbh = Sybase::DBlib->new( $DBUSER, $DBPASSWD, $DSQUERY );https://stackoverflow.com/questions/8575535
复制相似问题