编写脚本从表中获取 SQL Server 实例名称,然后尝试连接到这些实例中的每一个以提取数据库配置信息。涉及的所有数据库实例都是 SQL Server 的某个版本。如果连接失败(由于密码错误、实例关闭等),目的是打印用户定义的错误消息(“无法连接到 $inst,正在跳过。”)并继续浏览列表。我无法抑制来自 ODBC (SQL Server Native Client 10.0) 的默认错误消息。
尝试像这样连接:
eval {
my $dbh = DBI->connect(
"dbi:ODBC:Driver={SQL Server Native Client 10.0};Server=<instance_name>;Uid=<user_name>;Pwd=<password>;",
{ PrintError => 0, RaiseError => 1, AutoCommit => 1 }
);
};
我的(可能不正确)理解 PrintError => 0 应该抑制错误消息,如果连接方法失败,RaiseError => 1 将导致 DBI 死机,此时我可以检查 $@ 的错误并打印用户-定义的消息。我还查看了 HandleError 属性,但没有取得任何成功。
这是一个完全不现实的场景,还是我正在使用的 ODBC 驱动程序的结果?
根据 bohica 的建议,工作代码如下所示:
eval {
my $dbh = DBI->connect(
"dbi:ODBC:Driver={SQL Server Native Client 10.0};Server=<instance_name>;",
"Username",
"Password",
{ PrintError => 0, RaiseError => 1, AutoCommit => 1 }
);
};
用户名和密码已从连接字符串中移出,并作为单独的参数传递给 DBI 连接方法。