테이블에서 SQL Server 인스턴스 이름을 가져 오는 스크립트를 작성한 다음 각 인스턴스에 연결하여 데이터베이스 구성 정보를 회수합니다. 관련된 모든 데이터베이스 인스턴스는 SQL Server의 일부 버전입니다. 연결이 실패한 경우 (암호가 잘못되어 인스턴스가 다운 된 경우 등) 사용자 정의 오류 메시지 ("$ inst에 연결할 수 없습니다. 건너 뜁니다.")를 인쇄하고 목록을 계속 진행합니다. ODBC (SQL Server Native Client 10.0)의 기본 오류 메시지를 표시하는 데 문제가 있습니다.DBI 및 DBD와의 연결 오류 방지 : 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 드라이버의 결과입니까? 사용자 이름과 암호가 연결 문자열 밖으로 이동 및 연결 방법을 DBI 별도의 매개 변수로 전달 된
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 }
);
};
: 같은 bohica의 제안 당
은, 코드를 작업하는 모습.
예제에서 사용자 이름/암호 인수가 누락되어 DBI 속성의 hashref가 사용자 이름으로 표시됩니다. 연결 문자열에 UID/PWD를 넣었 기 때문에 DBI의 두 번째 및 세 번째 인수를 생략 할 수있는 것은 아닙니다. – bohica
이 변경으로 인해 예상 된 결과가 생성되면 오류 메시지가 표시되지 않습니다. – Bryan