R: [unixODBC][驱动程序管理器]无法打开库 'SQL Server':找不到文件

21
setwd("/mnt/mountpoint/abc/")
sqlServerConnString <- "SERVER=server;DATABASE=sqldwdb;UID=xyz;PWD=abc;"
sqlServerDataDS <- RxSqlServerData(sqlQuery = "SELECT * FROM xyz",
                               connectionString = sqlServerConnString)
sqlServerDataDF <- rxImport(sqlServerDataDS)

这是我的代码。 我在R中遇到以下错误

[unixODBC][Driver Manager]无法打开库 'SQL Server':找不到文件

[unixODBC][Driver Manager]连接不存在ODBC中的错误 在 SQLDisconnect 中 Could not open data source. Error in doTryCatch(return(expr), name, parentenv, handler) : Could not open data source.

我已在我的Linux机器上安装了MSSQL和unixODBC驱动程序,并且它也反映在/etc/odbc.ini文件中

有人可以帮我解决这个问题吗?


你的连接字符串开头好像缺少了 DRIVER=SQL Server; - nrussell
我现在已经添加了它。仍然面临相同的问题。 - Sonal
2
这个错误是直接从ODBC驱动程序通过Microsoft R Server传递的,您是否成功地从Microsoft R Server外部建立了与SQL Server的ODBC连接?能否请提供Microsoft R Server的版本信息? - Kirill Glushko - Microsoft
2
@KirillGlushko-Microsoft: 感谢您的帮助。我通过 Linux 终端检查了我的 SQL 连接。此前因为 /etc/odbcinst.ini 文件中文件位置错误而出现错误。我已经进行了更正,现在它已经可以正常工作了。非常感谢。 - Sonal
我在Mac上尝试使用odbc库在Rstudio中运行时遇到了相同的问题。有什么线索可以解决这个问题吗? - tavalendo
显示剩余2条评论
3个回答

37

当我尝试使用以下代码连接MSSQLSERVER时,遇到了相同的错误:

library(RODBC)
dbconnection <- odbcDriverConnect("Driver=SQL Server;Server=192.168.76.60; Database=kaggle;Uid=sa; Pwd=1234")

它向我抛出异常。
[unixODBC][Driver Manager]Can't open lib 'SQL Server' : file not found

为什么会出现这个错误?

答:当我们在驱动程序值上未正确设置适当的ODBC版本名称时。

我们从哪里可以获取驱动程序ODBC版本名称?

在“/etc”文件夹中,您将找到“odbcinst.ini”文件,请打开并检查版本名称。

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.1.so.0.1
UsageCount=1

我从这里获取了ODBC驱动程序名称,它将是“ODBC Driver 17 for SQL Server”。 然后我修改了我的连接字符串。

library(RODBC)
dbconnection <- odbcDriverConnect("Driver=ODBC Driver 17 for SQL Server;Server=192.168.76.60; Database=kaggle;Uid=sa; Pwd=1234")

它运行良好


9
/etc/odbcinst.ini文件中的信息来自哪里?在我的电脑上,那个文件是空白的。您在查看该文件之前是否进行了任何配置ODBC驱动程序的操作? - Patrick Conwell
@PatrickConwell 安装odbd驱动程序后,您将在etc目录下获得odbcinst.ini文件。 - Zaynul Abadin Tuhin
6
我使用这里的说明(https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15)来安装驱动程序。 - Thomas Luechtefeld
服务器上没有任何内容,也没有“locate odbcinst.ini”。 - Peter Krauss
1
@ThomasLuechtefeld +1,你应该将你的评论提交为答案,因为这是让ODBC对我起作用的方法,而不是上面那个答案。 - Marcelo Ventura

3

在我的情况下,Zaynul的回答没有起作用,不幸的是。但它帮助我找到了另一种方法。我正在使用sqlalchemy,并且我成功地创建了一个连接,通过传递驱动程序路径:

Original Answer: 最初的回答

engine = create_engine('mssql+pyodbc://sa:******@localhost:1433/dbCVServer?driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.2.so.0.1', echo=True)

engine.execute('select 1')

编辑:我对那个解决方案不满意,因为驱动程序的文件名可能会改变,所以我设法更改了用于连接到pymssql的库。

engine = create_engine('mssql+pymssql://sa:******@localhost:1433/dbCVServer')

这也很好用。=]

编辑2:另一个发现,连接到命名实例,例如那些使用sql express的人。

engine = create_engine('mssql+pymssql://mssql+pymssql://localhost\SQLEXPRESS/dbCVServer')

(注:Original Answer翻译成"最初的回答")

不必将libmsodbcsql库的安装路径放入,您可以在SQLAlchemy URL中引用它,例如:engine = create_engine('mssql+pyodbc://sa:******@localhost:1433/dbCVServer?driver=ODBC+Driver+17+for+SQL+Server - Tom Close

-2
这对我有效:
con <- DBI::dbConnect(
  odbc::odbc(),
  Driver   = "SQL Server",
  Server   = "server",
  Database = "database",
  UID      = "uid",
  PWD      = "pwd"
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接