通过 RODBC 连接到 SQL Server 数据库

Posted

技术标签:

【中文标题】通过 RODBC 连接到 SQL Server 数据库【英文标题】:Connect to a SQL Server database through RODBC 【发布时间】:2017-04-19 21:30:15 【问题描述】:

我的问题与

有关

Trying to connect to an ODBC server using RODBC in ubuntu

How to specify include and lib directories when locally installing RODBC?

但我找不到合适的答案。

我想使用 RODBC 连接到远程服务器上的 SQL Server 数据库。

我已经安装了unixodbc和freetds,可以在终端用T-SQL连接,所以连接存在。

但是当尝试在 R 中连接时(所有敏感信息已被 *** 替换):

odbcConnect(dsn="TESTSQL", uid=***, pwd=***)

我明白了:

Warning messages:
1: In RODBC::odbcDriverConnect("DSN=TESTSQL;UID=***;PWD=***") : [RODBC] ERROR: state 01000, code 0, message [unixODBC][Driver Manager]Can't open         lib '/usr/local/Cellar/freetds/0.95.18/lib/libtdsodbc.so' : file not found
2: In RODBC::odbcDriverConnect("DSN=TESTSQL;UID=***;PWD=***") :
  ODBC connection failed

odbc.ini 文件是:

[ODBC Data Sources]
TESTSQL     = Test database

[TESTSQL]
Driver      = MSSQL
Servername  = ***.**.**.**
Port        = **
Database    = ****
TDS_Version = 8.0

我已经安装了最新版本的 freetds,即 1.00.27,因此我很惊讶这个库 libtdsodbc.so 丢失了。

这正常吗?您会建议安装 0.95.18 版本还是继续使用 1.00.27 并查找缺少的库?

【问题讨论】:

如果你安装了这个库,你在哪里找到libtdsodbc.so?根据错误消息,我的猜测是它不在/usr/local/Cellar/... 之下。 (如果您不知道如何找到它,请尝试local libtdsodbc.so,或者,如果失败,请尝试grep libtdsodbc.so /var/lib/dpkg/info/*list,或者如果绝望,请尝试find / -type f -iname libtdsodbc.so。) 可能想在错误中隐藏您的用户名和密码 我曾寻找 libtdosbc.so,但没有成功,使用 grep 并找到: grep libtdsodbc.so /var/lib/dpkg/info/*list grep: /var/lib/dpkg/info/ *list: 没有这样的文件或目录我用 brew install --with-tdsver=8.0 --with-msdblib --with-unixodbc=/usr/local/Cellar/unixodbc/2.3.4/freetds Ian: infos已从消息中删除,谢谢 【参考方案1】:

我不得不删除 freetds:

brew remove freetds

然后重新安装它,指定 --with-unixodbc 以创建 libtsdodbc.so:

brew install freetds --with-unixodbc

在 odbc.ini 中,我必须注意不要混淆“Server”和“Servername”,并将驱动程序链接到 libtdsodbc.so,以便我的 odbc.ini 看起来像:

[ODBC Data Sources]
TESTSQL     = Test database

[TESTSQL]
Driver      = /usr/local/lib/libtdsodbc.so
Server      = ***.**.**.**
Port        = **
Database    = ****
TDS_Version = 8.0

并使用 RODBC 包连接

ch1 <- odbcConnect(dsn="TESTSQL", uid=***, pwd=***)
> ch1
RODBC Connection 5
Details:
  case=nochange
  DSN=TESTSQL
  UID=****
  PWD=******

有效!

此页面的更多详细信息

http://eriqande.github.io/2014/12/19/setting-up-rodbc.html

【讨论】:

以上是关于通过 RODBC 连接到 SQL Server 数据库的主要内容,如果未能解决你的问题,请参考以下文章

RODBC 连接到 Mavericks 上的 SQL Server

SQL Server 2014 RODBC 连接

在 R 中使用 RODBC 连接到 Azure SQL

SQL Server 查询因 RODBC 连接而失败,在 SQL Server 中工作

从 mac osx 10.11 连接到带有 RODBC 的 MS SQL 服务器

获取 MS SQL Server 2008 的连接字符串