Написание сценария для получения имен экземпляров SQL Server из таблицы, а затем попытка подключения к каждому из этих экземпляров для извлечения информации о конфигурации базы данных. Все задействованные экземпляры базы данных - это некоторая версия SQL Server. Если соединение не работает (из-за неправильного пароля, экземпляра нет и т. Д.), Намерение состоит в том, чтобы напечатать определенное пользователем сообщение об ошибке («Невозможно подключиться к $ inst, пропустить») и продолжить через список. У меня возникли проблемы с подавлением сообщения об ошибке по умолчанию от ODBC (собственный клиент SQL Server 10.0).Подавление ошибки соединения с DBI и DBD: собственный клиент ODBC SQL Server 10.0
Connection попытка так:
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, с которым я работаю?
Per предложения 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 соединять метод.
В вашем примере отсутствуют аргументы имени пользователя и пароля, поэтому ваш хэш-атрибут атрибутов DBI будет отображаться как имя пользователя. Просто потому, что вы помещаете UID/PWD в строку соединения, не означает, что вы можете опустить 2-й и 3-й аргументы DBI. – bohica
Выполнение этого изменения дает ожидаемые результаты, сообщение об ошибке подавляется. – Bryan