【问题标题】:Connecting to a SQL Server DB连接到 SQL Server 数据库
【发布时间】:2013-07-08 03:20:50
【问题描述】:

从昨天开始,我一直在尝试连接到 Perl 中的 SQL Server 数据库,但失败了。我使用DBI->connect 函数,但我收到错误消息,提示找不到数据源和驱动程序。我使用那个字符串:

'dbi:ODBC:mydb:myhost\myinstance'

我不确定字符串是否正确。有什么想法吗?

编辑:这是我得到的错误:

DBI connect('***:***\***','',...) failed: [Microsoft][ODBC Driver
Manager] Data source name not found and no default driver specified (SQL-IM002)
at Collector.pl line 137

【问题讨论】:

    标签: perl odbc dbi


    【解决方案1】:

    嗯,这似乎工作正常,

    use DBI;
     #
    $dbh = DBI->connect( "dbi:mysql:DBNAME", "root", "password" )
      or die "Connection Error $DBI::errstr\n";
    

    注意请检查您是否安装了所需的模块。

    【讨论】:

      【解决方案2】:

      ODBC 的 DBI 连接字符串的格式是“dbi:ODBC:DSN_name”或“dbi:ODBC:DSN=DSN_name”(对于使用数据源名称 (DSN) 的连接。在这种情况下,DSN_name 需要是名称使用 ODBC 管理员创建的数据源。这种情况在 Windows 64 位环境中稍微复杂一些,因为有 2 个 ODBC 管理员,一个用于 32 位应用程序,一个用于 64 位应用程序(不能混合使用两者)。

      所以,首先,确定您的 Perl 是 32 位还是 64 位可执行文件 - 您通常可以从 perl -V 的输出中看到这一点(查找 archname,但也有其他迹象)。然后根据您的 perl 的构建方式找到合适的 ODBC 管理员并使用它创建数据源。最后,如上更改您的 DBI 连接字符串。

      还有所谓的无 DSN 连接,它们不需要 DSN,而是您命名 DRIVER 以及连接到数据库所需的任何属性。

      如果您使用“dbi:ODBC:DSN_name”而不是“dbi:ODBC:DSN=DSN_name”,DBD::ODBC 的作用会有所不同,您可以阅读有关 ODBC - The Connection Process 的信息。

      您可以在64 bit ODBC 找到更多关于 32/64 位 ODBC 以及在哪里可以找到合适的驱动程序管理器的信息。您可以在Drivers, Data Sources and Connection - Perl DBI/DBD::ODBC Tutorial Part 1 找到有关 DBD::ODBC 和连接的信息。

      【讨论】:

      • DBI->data_sources('ODBC') 似乎返回一个空数组...
      • 那么你有数据源吗?在 ODBC 驱动程序管理器中查看是否已定义。
      • 问题是我正在为生产服务器(很多)编写 Perl 脚本。我会弄清楚的,我会回来的
      • 然后使用 DSN 较少的连接,即使用 'dbi:ODBC:DRIVER={我的驱动程序名称在这里};some_attr=some_value;another_attr=another_value;'。它完全避免了创建 DSN。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      相关资源
      最近更新 更多