我在 Linux 服务器上运行不同的 r 程序。由于数据库连接出现以下错误,程序失败:-
1: In odbcDriverConnect(paste0("DRIVER={SQL Server}; server=", server, : [RODBC] ERROR: state 08001, code 0, message [unixODBC][FreeTDS][SQL Server]Unable to connect to data source
2: In odbcDriverConnect(paste0("DRIVER={SQL Server}; server=", server, : [RODBC] ERROR: state 01000, code 20002, message [unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed
3: In odbcDriverConnect(paste0("DRIVER={SQL Server}; server=", server, : [RODBC] ERROR: state 01000, code 20017, message [unixODBC][FreeTDS][SQL Server]Unexpected EOF from the server
4: In odbcDriverConnect(paste0("DRIVER={SQL Server}; server=", server, : ODBC connection failed Execution halted
有时,程序会完全运行而不会出现任何错误。有时会失败。我无法弄清楚到底是什么问题。
我测试了一段代码以查看其行为方式:
library(RODBC)
library(RODBCext)
for (i in 1:100){
dbhandle <- odbcDriverConnect(paste0("DRIVER={SQL Server}; server=",server,"; database=",dbname,"; uid=",username,"; pwd=",password, "; TDS_Version=8.0; Port=1433;", sep=""))
query <- "select * from analysis"
analysis <- sqlExecute(dbhandle, query = query, fetch = T)
odbcClose(dbhandle)
}
有时它会被完全执行。有时会失败(例如第 45 次连接数据库失败)
我从来没有在windows环境下遇到过这个问题。
我想知道在这种情况下到底是什么问题。是否与网络、驱动程序、我的连接字符串或数据库有关。
这个问题的解决方案是什么。
最佳答案
我想我的连接字符串 和配置文件 看起来不错。
可能存在网络问题,导致打开的RODBC
连接断开。
我试过这个解决方案:-
repeat
{
dbhandle <- odbcDriverConnect(paste0("DRIVER={SQL Server}; server=",server,"; database=",dbname,"; uid=",usernm,"; pwd=",passwd, "; TDS_Version=8.0; Port=1433;", sep=""))
if(class(dbhandle) == "RODBC"){
break
}
}
在我的 dbhandle
属于 RODBC
类之前,我不会继续。
通过在需要数据库连接的地方将此代码集成到我的程序中,我能够运行程序而不会收到这些错误消息。
关于sql-server - 在 Linux 中使用 RODBC 连接到 SQL Server 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47017228/