在Perl脚本中建立数据库连接时出错?

时间:2017-07-06 10:57:19

标签: perl dbi sqlanywhere dbd

我使用的是perl 5.24。我正在努力学习Perl。

我编写了一个简单的Perl代码来连接数据库。但是给出了错误陈述

  

DBI connect('database=vms','DBA',...) failed: (no error string) at simpleperl.pl line 13.

代码是

#!/usr/bin/perl

use DBI;
use DBD::SQLAnywhere;

my $driver = "SQLAnywhere"; 
my $database = "vms";
my $dsn = "DBI:$driver:database=$database";
my $userid = "DBA";
my $password = "admin";
my $dbh = DBI->connect($dsn, $userid, $password,{RaiseError => 1}) or die ("died connection:$DBI::errstr");

if($dbh)
{
    print "Connection Established";
}

有人能指出这里可能出现的问题吗?

1 个答案:

答案 0 :(得分:2)

请注意DBD::SQLAnywhere文档中的以下内容:

  

$dbh = DBI->connect( 'dbi:SQLAnywhere:ENG=demo', $userid, $passwd );

#!/usr/bin/perl

use strict;
use warnings;    
use DBI;

my $driver = "SQLAnywhere"; 
my $database = "vms";
my $dsn = "DBI:$driver:ENG=$database";
my $userid = "DBA";
my $password = "admin";
my $dbh = DBI->connect($dsn, $userid, $password, {RaiseError => 1});

print "Connection established\n";

$dbh->disconnect;

另请注意以下内容:

  • 始终使用strictwarnings
  • 您不需要use DBD::SQLAnywhere;DBI将根据您在连接字符串中指定的内容选择驱动程序。
  • 您在连接选项中指定了{RaiseError => 1}。这意味着,不需要or die。如果DBI失败,connect会嘶哑。
  • 您可能希望AutoCommit => 0RaiseError => 1一起使用。
  • 连接尝试后不需要if ($dbh)。除非connect成功,否则你不会到达那里。

鉴于修复连接字符串没有解决问题,我没有SQLAnywhere数据库的实例来测试,我建议你添加:

DBI->trace( 5 );
connect调用之前

,并使用跟踪信息更新您的问题。另请参阅TRACING