我构建了一个Rshiny应用程序,该应用程序从Microsoft Azure中提取数据。当我在连接字符串中使用“ SQL Server”驱动程序时,我的应用程序在本地运行,但是当我在应用程序Shinyapps.io上发布该应用程序时,该应用程序无法运行。 根据{{3}}的建议,当我在Shinyapps.io上发布时,我一直试图使用“ FreeTDS”驱动程序与Azure连接,但是我没有任何运气。
这是我的连接字符串:
con <- dbConnect(odbc::odbc(),
Driver = "FreeTDS",
Server = "servername",
Database = "databasename",
Uid = "uid",
Pwd = "pwd",
Port = 1433,
TDS_Version = 9.0)
使用“ FreeTDS”驱动程序时,我收到以下错误消息:
Error in value[[3L]](cond) :
nanodbc/nanodbc.cpp:950: 08001: [unixODBC][FreeTDS][SQL Server]Unable to connect to data source
我尝试使用TDS_Version 7.0、7.2、7.4、9.0-均无效。谁能帮助我解码此错误消息?谢谢!
注意:我正在Windows 10上使用R 3.6。我已将Azure上的Shinyapps.io IP地址列入白名单,所以这不是问题。
答案 0 :(得分:0)
驱动程序要求仅在连接字符串上指定DSN和PWD,而不能在DSN中指定它们。 Picture
有关更多详细信息,请参见类似的http://www.freetds.org/userguide/odbcconnattr.htm问题,该问题解决了类似的问题。
希望这会有所帮助。
答案 1 :(得分:0)
对于在本地Windows和Shinyapps.io上进行连接,这对我来说是有效的:
library(RODBC)
is_local<-Sys.getenv('SHINY_PORT')==""
dbConnector <- function(local=FALSE){
if(local){dbConn <- odbcDriverConnect("Driver=ODBC Driver 13 for SQL Server;Server=xxx.database.windows.net,1433;Database=xxxxxxxxx;Uid=xxxx;Pwd=xxxxxxxxx;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30")
} else {dbConn <- odbcDriverConnect("Driver=FreeTDS;TDS_Version=8.0;Server=xxxx.database.windows.net; Port=1433;Database=xxxxx;Uid=xxxxxx;Pwd=xxxxxxxxx;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30")}
}
dbConn <- dbConnector(is_local)