我在Linux机器上安装了DBD::ODBC
,但是当我尝试连接到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 Driver的条目。我错过了什么吗?为什么/etc/odbc.ini
文件为空?或者我是否必须手动输入数据?
答案 0 :(得分:0)
您需要首先为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
&#34;设置&#34; keyword标识另一个可用于提供GUI设置对话框以创建DSN的共享对象,但这些对象在unix上很少可用,它只会保存您在/etc/odbc.ini文件中手动创建DSN。
您不需要创建DSN,但是如果您使用连接字符串,例如&#39; dbi:ODBC:mydsn&#39;或者&#39; dbi:ODBC:DSN = mydsn&#39; (请参阅ODBC :: ODBC了解为何这些略有不同)。如果您不想创建DSN,则可以使用DSN较少的连接,使用连接字符串,例如&#39; dbi:ODBC:DRIVER = {Some_SQL_Server_driver}; someattr = value; someattr2 = value&#39;在哪里&#34; someattr&#34;等等是您的驱动程序定义的属性,告诉它如何连接到数据库(在线查看)。
同样,您甚至不需要在/etc/odbcinst.ini中添加条目,因为您可以使用&#; dbi:ODBC:DRIVER = / path / to / driver&#39;但那不常见。
如果你安装一个新的unixODBC,你可能需要重建DBD :: ODBC - 它取决于你如何安装它,例如,通过你的包管理器或自己构建(这可能需要重建DBD :: ODBC,因为你& #39; ll有DBD :: ODBC从unixODBC使用的新头文件。如果您使用unixODBC软件包但仍想重建DBD :: ODBC,则需要确保安装unixodbc-dev软件包以及unixodbc。
unixODBC的新问题是,我相信这个版本在某个时候更改为2并且创建的符号链接有时是错误的。在/ usr / lib及其下面查找名为libodbc *的文件,并检查符号链接是否指向现有的.so文件。
当然,由于您似乎使用的是64位Perl,因此您需要64位unixODBC和ODBC驱动程序 - 它们都必须匹配。
祝你好运。
更新:我省略了重建DBD :: ODBC的原因。如果你有一个版本1 unixODBC但是内置64位,则SQLLEN类型是32位。如果您针对此进行构建,然后升级到版本2 unixODBC,则SQLLEN类型将更改为64位。如果您不重建DBD :: ODBC,您可能会遇到各种问题,例如seg故障和访问冲突。