sql-server - 在 Linux 中使用 RODBC 连接到 SQL Server 时出错

标签 sql-server r linux database

我在 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/

相关文章:

c++ - 生成 4 个方向随机游动的 RCPP 函数

linux - 如何使用 shell 脚本删除特定行

sql - SQL - 任何分组依据

sql-server - 从组中选择前 1 个并在查询中排序

sql - 如何在 SQL Server 中使用预定义的特殊字符修剪字符串?

c - C中两个日期之间的差异

mysql - 使用 sed 在字段周围添加引号,null 除外

sql-server - CRM 2011 Silverlight 存储过程

r - 从没有 id.var 的长格式到宽格式?

r - 使用Rcpp从C++调用用户定义的R函数