【问题标题】:Error while connecting to Sybase DB连接到 Sybase DB 时出错
【发布时间】:2012-01-24 10:07:16
【问题描述】:

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

【问题讨论】:

标签: perl sybase


【解决方案1】:

你可以试试下面的语法吗? :

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

【讨论】:

  • 使用了你提到的语法,但仍然得到同样的错误。
【解决方案2】:

我觉得这里的服务器名不会太长。

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

可能在 Sybase 特定的“接口”配置文件中未正确定义 MYDATABASESERVER 服务器别名。它位于目录 $SYBASE/$SYBASE_OCS 中。 MYDATABASESERVER 是怎么说的(应该是 2 行)?

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

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

【讨论】:

  • 已将代码更改为使用 DBD::Sybase,现在可以正常工作了。 @knb:非常感谢。
猜你喜欢
  • 2021-01-04
  • 2013-09-14
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多