テーブルからSQL Serverインスタンス名を取得するスクリプトを作成し、これらの各インスタンスに接続してデータベース構成情報を取り戻そうとします。関連するすべてのデータベースインスタンスは、SQL Serverの一部のバージョンです。接続が失敗した場合(パスワードが間違っている、インスタンスがダウンしているなど)、ユーザー定義のエラーメッセージ(「$ instに接続できません。スキップしています)」を印刷し、リストを続行します。 ODBC(SQL Serverネイティブクライアント10.0)からのデフォルトエラーメッセージを抑制するのに問題があります。DBIとDBDとの接続エラーを抑制する: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 connectメソッドが失敗した場合に死ぬために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 connectメソッドに別々のパラメータとして渡されました。
DBI属性のハッシュリファレンスがユーザー名として表示されるように、例ではユーザー名とパスワードの引数がありません。接続文字列にUID/PWDを置いただけであっても、DBIの2番目と3番目の引数を省略することはできません。 – bohica
この変更により予期した結果が得られた場合、エラーメッセージは表示されません。 – Bryan