0

テーブルから 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 は 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 接続メソッドに渡されました。

4

2 に答える 2

3

Pedro が言及している問題を修正すると仮定すると、PrintError=>0 はエラーを抑制し、PrintWarn も確認する必要があります。RaiseError=>1 は、接続が失敗した場合に接続を終了させ、あなたの例ではエラーは $@ になります。

于 2010-11-19T09:53:19.053 に答える
0

connectクラスメソッドです。で呼び出すとDBI->connect、dbハンドルが返されます($dbhあなたの場合)。

于 2010-11-19T06:19:06.673 に答える