代码之家  ›  专栏  ›  技术社区  ›  Bryan

禁止DBI和DBD的连接错误:ODBC SQL Server本机客户端10.0

  •  0
  • Bryan  · 技术社区  · 15 年前

    编写一个脚本从表中获取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 }
      );
    };
    

    我(可能不正确)理解,如果connect方法失败,printError=>0应取消显示错误消息,raiseError=>1将导致dbi死亡,此时我可以检查$@中的错误并打印用户定义的消息。我也看过handleerrror属性,但没有取得任何成功。

    这是一个完全不现实的场景,还是我正在使用的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方法。

    2 回复  |  直到 14 年前
        1
  •  3
  •   bohica    15 年前

    假设您修复了Pedro提到的问题,那么printError=>0将抑制错误,您可能还需要查看printWarn。如果连接失败,raiseError=>1将导致连接终止,在您的示例中,错误将在$@中。

        2
  •  0
  •   Pedro Silva    15 年前

    connect 是一个类方法;使用 DBI->connect ,返回一个db句柄( $dbh 在你的情况下)。

    推荐文章