我构建了一个从Azure中提取数据的Rshiny应用程序Microsoft。当我在连接字符串中使用"SQL Server"驱动程序时,我的应用程序在本地工作,但在 shinyapps.io 上发布应用时不起作用。根据这里的建议,我一直在尝试使用"FreeTDS"驱动程序在 shinyapps.io 上发布时与 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 地址列入白名单,因此这不是问题所在。
为了在本地 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)
驱动程序要求仅在连接字符串上指定 DSN 和 PWD,不能在 DSN 中指定它们。 http://www.freetds.org/userguide/odbcconnattr.htm
有关更多详细信息,请参阅类似 GitHub 问题,该问题解决了类似问题。
希望这有帮助。