1

从昨天开始,我一直在尝试连接到 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
4

2 回答 2

3

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,而是您命名驱动程序和连接到数据库所需的任何属性。

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

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

于 2013-07-10T12:28:26.263 回答
0

嗯,这似乎工作正常,

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

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

于 2013-07-10T10:54:11.653 回答