gpt4 book ai didi

sql-server - 从 Linux 使用 Perl 连接到 SQL Server 2012 时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:49:40 24 4
gpt4 key购买 nike

我已经安装了DBD::ODBC在 Linux 计算机上,但是当我尝试连接到 SQL Server 2012 时,它显示以下错误

DBI connect('Driver={SQL Server};Server=<SERVER_NAME>;Database=<DATABASE_NAME>','<USER_NAME>',...) failed: [unixODBC][Driver Manager]Data source name not found, and no default driver specified (SQL-IM002) at script.pl line 47.

我正在使用下面的代码

my $dsn = "dbi:ODBC:Driver={SQL Server};Server=$host;Database=$database";
my $dbh = DBI->connect($dsn, $user, $auth, { RaiseError => 1 });

/etc/odbcinst.ini 文件包含以下条目:

# Example driver definitions

# Driver from the postgresql-odbc package
# Setup from the unixODBC package
[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/lib/psqlodbc.so
Setup = /usr/lib/libodbcpsqlS.so
Driver64 = /usr/lib64/psqlodbc.so
Setup64 = /usr/lib64/libodbcpsqlS.so
FileUsage = 1

# Driver from the mysql-connector-odbc package
# Setup from the unixODBC package
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc5.so
Setup = /usr/lib/libodbcmyS.so
Driver64 = /usr/lib64/libmyodbc5.so
Setup64 = /usr/lib64/libodbcmyS.so
FileUsage = 1

并且 /etc/odbc.ini 文件为空。

尽管我已经安装了DBD::ODBC模块,但没有SQL驱动程序的条目。我错过了什么吗?为什么 /etc/odbc.ini 文件为空?还是我必须手动输入数据?

最佳答案

您需要先安装 MS SQL Server 的 ODBC 驱动程序。您可以从 Microsoft、Easysoft 和其他供应商处获取一个,也可以使用 freeTDS。安装驱动程序后,您需要向/etc/odbcinst.ini 添加条目,就像您已经为 Postgres 和 MySQL 添加的条目一样,至少包含:

[Some_SQL_Server_driver]
Driver = /path/to/shared/object/of/odbc/driver.so

“Setup”关键字标识另一个共享对象,该共享对象可用于提供 GUI 设置对话框来创建 DSN,但这些在 UNIX 上很少可用,并且它只能节省您在/etc/odbc.ini 文件中手动创建 DSN 的麻烦。

您不需要创建 DSN,但如果创建,您可以使用“dbi:ODBC:mydsn”或“dbi:ODBC:DSN=mydsn”等连接字符串(请参阅 ODBC::ODBC 了解它们为何略有不同)。如果您不想创建 DSN,则可以使用 DSN less 连接,其中使用连接字符串,如 'dbi:ODBC:DRIVER={Some_SQL_Server_driver};someattr=value;someattr2=value',其中“someattr”等是驱动程序定义的属性,告诉它如何连接到数据库(在线查找这些)。

同样,您甚至不需要向/etc/odbcinst.ini 添加条目,因为您可以使用“dbi:ODBC:DRIVER=/path/to/driver”,但这种情况不太常见。

如果您安装新的 unixODBC,则可能需要重建 DBD::ODBC - 这取决于您安装它的方式,例如,通过包管理器或您自己构建(这可能需要重建 DBD::ODBC,因为您将拥有 DBD::ODBC 从 unixODBC 使用的新头文件)。如果您使用 unixODBC 软件包并且仍想重建 DBD::ODBC,您需要确保安装 unixodbc-dev 软件包以及 unixodbc。

您的 unixODBC 新问题是,我相信版本有时会更改为 2,并且创建的符号链接(symbolic link)有时是错误的。在/usr/lib 及其下面查找名为 libodbc* 的文件,并检查指向现有 .so 文件的符号链接(symbolic link)。

当然,由于您似乎使用的是 64 位 Perl,因此您需要 64 位 unixODBC 和 ODBC 驱动程序 - 它们都必须匹配。

祝你好运。

更新:我省略了必须重建 DBD::ODBC 的原因。如果您有版本 1 unixODBC 但构建为 64 位,则 SQLLEN 类型为 32 位。如果您根据此进行构建,然后升级到版本 2 unixODBC,则 SQLLEN 类型将更改为 64 位。如果不重建 DBD::ODBC,您可能会遇到各种问题,例如段错误和访问冲突。

关于sql-server - 从 Linux 使用 Perl 连接到 SQL Server 2012 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26780299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com