Написание сценария для получения имен экземпляров SQL Server из таблицы, затем попытка подключиться к каждому из этих экземпляров для получения информации о конфигурации базы данных.Все задействованные экземпляры базы данных являются некоторой версией SQL Server.В случае сбоя соединения (из-за неверного пароля, экземпляра не работает и т. Д.) Необходимо напечатать пользовательское сообщение об ошибке («Невозможно подключиться к $ inst, пропуск.») И продолжить работу по списку.У меня проблемы с подавлением сообщения об ошибке по умолчанию из ODBC (собственный клиент SQL Server 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.