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

问题描述 投票:1回答:1

我在linux服务器上运行不同的r程序。程序因数据库连接失败而导致以下错误: -

1:在odbcDriverConnect中(paste0(“DRIVER = {SQL Server}; server =”,服务器,:[RODBC]错误:状态08001,代码0,消息[unixODBC] [FreeTDS] [SQL Server]无法连接到数据源

2:在odbcDriverConnect中(paste0(“DRIVER = {SQL Server}; server =”,服务器,:[RODBC]错误:状态01000,代码20002,消息[unixODBC] [FreeTDS] [SQL Server] Adaptive Server连接失败

3:在odbcDriverConnect中(paste0(“DRIVER = {SQL Server}; server =”,服务器,:[RODBC]错误:状态01000,代码20017,消息[unixODBC] [FreeTDS] [SQL Server]来自服务器的意外EOF

4:在odbcDriverConnect中(paste0(“DRIVER = {SQL Server}; server =”,服务器,:ODBC连接失败)执行暂停

有时,程序运行完全没有任何错误。有时会失败。我无法确切地知道问题是什么。

我测试了一段代码,看看它是如何表现的:

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环境中遇到过这个问题。

我想知道在这种情况下究竟是什么问题。它是与网络,驱动程序,我的连接字符串或数据库相关的东西。

什么可以解决这个问题。

sql-server r linux database
1个回答
0
投票

我想我的连接字符串和配置文件看起来不错。

也许有一个网络问题,正在放弃一个开放的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

通过在我的程序中将此代码集成到需要数据库连接的任何地方,我能够运行程序而不会收到这些错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.