当我将perl环境从5.16.0切换到5.24.0时,我得到了一个我无法理解的奇怪行为。这段代码
use DBI;
my $conn = 'dbi:ODBC:sqlserver_xxxx';
my $userid = 'dw_select';
my $passwd = 'xxxx';
for ( 1 .. 100 ) {
warn "start try $_";
my $dbh = DBI->connect($conn, $userid, $passwd, { RaiseError => 1 } );
warn "end try $_";
}
在5.16.0上运行正常,但当切换到5.24.0时,我得到以下结果:
start try 1 at test_con.pl line 9.
end try 1 at test_con.pl line 11.
start try 2 at test_con.pl line 9.
end try 2 at test_con.pl line 11.
start try 3 at test_con.pl line 9.
DBI connect('sqlserver_xxxx','dw_select',...) failed:
Unable to fetch information about the error at test_con.pl line 10.
通过此修改,它可以再次运行而不会出错:
use DBI;
my $conn = 'dbi:ODBC:sqlserver_xxxx';
my $userid = 'dw_select';
my $passwd = 'xxxx';
my $dbh;
for ( 1 .. 100 ) {
warn "start try $_";
$dbh = DBI->connect($conn, $userid, $passwd, { RaiseError => 1 } );
warn "end try $_";
}
你们中有人对此有解释吗?
答案 0 :(得分:0)
感谢您的有用建议!在perl 5.16.0上,我使用DBI 1.631和perl 5.24.0 DBI 1.636。我没有考虑过两种环境下的不同DBI版本。使用断开连接的提示也有效,但我仍对两个DBI版本的不同行为感到惊讶。