4

我正在尝试使用 RODBC 在 cygwin 下从 R 连接到 SQL Server 数据库。

我已经安装了libiobbcand libiodbc-devel,据我了解,它提供了 RODBC 包所需的驱动程序管理器。

我安装了freetds,据我了解,它提供了一个可以连接到 MS SQL 服务器数据库的 ODBC 驱动程序。我使用它的tsql命令行工具来确认我可以连接到 SQL Server。

我现在了解将驱动程序管理器 (iODBC) 指向驱动程序 (freeTDS) 的任务,以便我可以从 R 的RODBC库连接到 SQL Server 数据库

freeTDS的用户指南提示 freeTDS 提供的驱动程序应该是 at /usr/local/freetds/lib/libtdsodbc.so,并且类似下面的内容应该将此驱动程序定义为 idobc:

;
; odbcinst.ini
;
[FreeTDS]
Driver = /usr/local/freetds/lib/libtdsodbc.so

但我libtdsodbc.so的系统上没有,而且 cygwin 包freetds似乎没有提供它(已安装二进制文件和支持文件的列表

如何配置 idobc 以使用 freeTDS 驱动程序连接到 MS SQL?

编辑

一位同事位于我/lib/cygtdsodbc.dll/usr/lib/cygtdsodbc.dll系统上。这可能是 cygwin 的等价物libtdsodbc.so吗?

我创建了一个odbcinst.ini包含以下内容的文件来定义驱动程序:

[ODBC Drivers]
FreeTDS = Installed

[FreeTDS]
Driver = /usr/lib/cygtdsodbc.dll

和一个odbc.ini定义数据源的文件my_db,使用上面定义的驱动程序:

[ODBC Data Sources]
my_db = FreeTDS

[my_db]
Driver = /usr/lib/cygtdsodbc.dll
Database = db_name
Host = server_dns_name
Port = 1433

跑去iodbctest检查

$ iodbctest
iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.52.0812.0326

Enter ODBC connect string (? shows list): ?

DSN                              | Driver
------------------------------------------------------------------------------
my_db                            | FreeTDS

Enter ODBC connect string (? shows list): my_db
1: SQLDriverConnect = [iODBC][Driver Manager]Driver's SQLAllocEnv() failed (0) SQLSTATE=IM004
1: ODBC_Connect = [iODBC][Driver Manager]Driver's SQLAllocEnv() failed (0) SQLSTATE=IM004
4

1 回答 1

0

iodbctest程序指示它找不到my_db;这是您未正确配置的线索。

再看一下 FreeTDS 用户指南,特别是哪些属性可以和不能在odbc.ini. 您需要一个serverservername属性odbc.ini,具体取决于您是否要使用freetds.conf文件来标识服务器。

于 2016-06-05T20:53:04.017 回答