Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在odbcCloseAll()之后,R中缓存的RODBC odbcConnect()失败_Sql_R_Caching - Fatal编程技术网

Sql 在odbcCloseAll()之后,R中缓存的RODBC odbcConnect()失败

Sql 在odbcCloseAll()之后,R中缓存的RODBC odbcConnect()失败,sql,r,caching,Sql,R,Caching,我基本上使用了Joe Cheng和Aaron Mackey在R中发布的用于缓存SQL连接的代码。在我调用odbcCloseAll,然后再次尝试调用getConnection之前,它工作得很好。下面是我一步一步做的: 调用getConnection-这可以正常工作 调用odbcCloseAll-看看如果所有连接都以某种方式关闭会发生什么 调用getConnection-这是我遇到错误的地方 错误 直到我调用rmlist=lsall.names=TRUE并将getConnection函数再次源代码化

我基本上使用了Joe Cheng和Aaron Mackey在R中发布的用于缓存SQL连接的代码。在我调用odbcCloseAll,然后再次尝试调用getConnection之前,它工作得很好。下面是我一步一步做的:

调用getConnection-这可以正常工作 调用odbcCloseAll-看看如果所有连接都以某种方式关闭会发生什么 调用getConnection-这是我遇到错误的地方 错误

直到我调用rmlist=lsall.names=TRUE并将getConnection函数再次源代码化到R中,我才得到要消失的错误消息

我的代码如下所示:

图书馆RODBC
getConnection您已关闭连接。函数要做的第一件事是检查连接是否存在。如果它这样做了,它将返回它。如果没有,并且只有在没有的情况下,它才能建立连接。删除函数中的else,如下所示,防止它关闭不存在的连接,我相信它应该可以工作

library(RODBC)

getConnection <- function() {

  if (!exists('.connection', where=.GlobalEnv)) {
    .connection <<- odbcConnect("myDsn")
  }  
  if (class(try(sqlQuery(.connection, "SELECT 1"))) == "try-error") {
     if (!exists('.connection', where=.GlobalEnv)) {
       .connection <<- odbcConnect("myDsn")
     }
     else {
       odbcClose(.connection)         
     }
    .connection <<- odbcConnect("myDsn")
  }

  return(.connection)
}

谢谢你的回复。我尝试使用您发布的代码,删除了else,但仍然得到一个错误:sqlQuery.connection中出错,选择1:第一个参数不是开放的RODBC通道隐藏回溯重新运行,odbcClose中出现调试错误。连接:参数这次不是开放的RODBC通道,我相信,第一个条件失败;也就是说,R认为存在连接。在第二种情况下失败,其中.connection不是开放的RODBC通道。是否包括检查是否存在.connection?我尝试了使用第二个if发布的代码!存在。。。检查ifclasstry的内部。。。我仍然在sqlQuery.connection中遇到错误,选择1:第一个参数不是odbcClose中的开放RODBC通道错误。连接:参数不是开放RODBC通道,因此调用odbcCloseAll:-.连接仍然存在-。连接不是开放RODBC通道抱歉。。。下面继续评论:sqlQuery.connection中出错,请选择1:第一个参数不是odbcClose中的开放RODBC通道错误。连接:参数不是开放RODBC通道,因此调用odbcCloseAll后似乎:-。连接仍然存在-。连接不是开放RODBC通道-classtrysqlQuery。。。失败,因为它可能期望一个开放的RODBC通道甚至尝试-否则{odbcCose…也会失败,因为。连接不是RODBC通道。我的想法正确吗?该错误不可能发生。它包含在一次尝试中。
library(RODBC)

getConnection <- function() {

  if (!exists('.connection', where=.GlobalEnv)) {
    .connection <<- odbcConnect("myDsn")
  }  
  if (class(try(sqlQuery(.connection, "SELECT 1"))) == "try-error") {
     if (!exists('.connection', where=.GlobalEnv)) {
       .connection <<- odbcConnect("myDsn")
     }
     else {
       odbcClose(.connection)         
     }
    .connection <<- odbcConnect("myDsn")
  }

  return(.connection)
}
getConnection <- function() {  
  if (!exists('.connection', where=.GlobalEnv)) {
    .connection <<- odbcConnect("myDsn")
  }  
  if (class(try(sqlQuery(.connection, "SELECT 1"))) == "try-error") {
    odbcClose(.connection)
    .connection <<- odbcConnect("myDsn")
  } 
  return(.connection)
}