首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Linux使用Perl连接到SQL Server 2012时出现问题

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

Stack Overflow用户
提问于 2014-11-06 21:07:53
回答 1查看 382关注 0票数 0

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

代码语言:javascript
复制
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.

我正在使用下面的代码

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

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

代码语言:javascript
复制
# 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文件是空的?或者我必须手动输入数据?

EN

回答 1

Stack Overflow用户

发布于 2014-11-11 16:45:37

您需要先安装用于MS SQL Server的ODBC驱动程序。你可以从微软、Easysoft和其他供应商那里获得一个,或者你也可以使用freeTDS。一旦你安装了你的驱动程序,你需要在/etc/odbcinst.ini中添加条目,就像你已经拥有的Postgres和MySQL一样,至少需要:

代码语言:javascript
复制
[Some_SQL_Server_driver]
Driver = /path/to/shared/object/of/odbc/driver.so

" setup“关键字标识另一个共享对象,该对象可用于提供GUI设置对话框来创建DSN,但这些对象在unix上很少使用,它只会让您在/etc/odbc.ini文件中手动创建DSN。

您不需要创建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,而创建的符号链接有时是错误的。在/usr/lib及其下面查找名为libodbc*的文件,并检查符号链接是否指向现有的.so文件。

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

祝你好运。

更新:我省略了必须重新构建DBD::ODBC的原因。如果您有一个版本1SQLLEN,但是构建了64位的unixODBC,那么SQLLEN类型是32位。如果在此基础上进行构建,然后升级到版本2SQLLEN,则unixODBC类型将更改为64位。如果你不重新构建DBD::ODBC,你可能会遇到各种各样的问题,比如seg错误和访问冲突。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26780299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档