如何在使用shinyapps.io显示通过RODBC

时间:2017-06-27 03:12:59

标签: sql r shiny rodbc

我刚刚问了一个关于在使用shinyapps时没有链接SQL的问题。 “first argument“ error when using shinyapps.io, rodbc to show sql query result in web。当我尝试使用shinyapps.io来共享我使用RODBC从SQL数据库获得的SQL查询结果时,这是关于错误信息“第一个参数不是一个开放的rodbc通道”。

非常感谢Lars Br。的帮助,我想我还需要尝试使用odbcDriverConnect而不是odbcConnect。我看到了https://support.rstudio.com/hc/en-us/articles/225408367-Connecting-to-databases-using-RODBC-on-shinyapps-io的一些建议,可以解决我的问题。

但是,我的问题是:因为我对所有这些东西都很陌生,所以我对odbcDriverConnect中的所有参数感到困惑。我尝试过这样:

ch <- odbcDriverConnect('driver=SQL Server;server=HANARB1P;database=testing;uid=****;pwd=****;TrustServerCertificate=true')

我有以下信息:

Warning messages:
1: In odbcDriverConnect("driver=SQL Server;server=HANARB1P;database=testing;uid=****;pwd=****;TrustServerCertificate=true") :
  [RODBC] ERROR: state 08001, code 17, message [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.
2: In odbcDriverConnect("driver=SQL Server;server=HANARB1P;database=testing;uid=****;pwd=****;TrustServerCertificate=true") :
  [RODBC] ERROR: state 01000, code 53, message [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).
3: In odbcDriverConnect("driver=SQL Server;server=HANARB1P;database=testing;uid=****;pwd=****;TrustServerCertificate=true") :
  [RODBC] ERROR: state 01S00, code 0, message [Microsoft][ODBC SQL Server Driver]Invalid connection string attribute
4: In odbcDriverConnect("driver=SQL Server;server=HANARB1P;database=testing;uid=****;pwd=****;TrustServerCertificate=true") :
  ODBC connection failed

到目前为止,我只有DSN:HANARB1P。我不知道odbcDriverConnect中的驱动程序,服务器和数据库是什么。我无法在网上找到这些定义。有人可以向我解释一下吗?

我也从http://docs.rstudio.com/shinyapps.io/applications.html中找到了一些可能有用的信息。它说:“如果您的闪亮应用程序需要访问您在组织防火墙后面运行的数据库,那么您的IT部门将需要知道哪些服务器将通过防火墙连接。以下是您必须列入白名单的shinyapps.io IP地址: ”。我不知道这是否与我的问题有关。如果是这样,我如何设置这些东西?

1 个答案:

答案 0 :(得分:1)

我认为你需要尝试更改下面文章中提到的驱动程序类型:https://support.rstudio.com/hc/en-us/articles/225408367-Connecting-to-databases-using-RODBC-on-shinyapps-io。我推断你是想远程访问这个数据库,对吗?如果是这样,您需要使用该数据库服务器的公共IP地址和端口号,而不是服务器的名称。

con <- odbcDriverConnect('Driver=FreeTDS;TDS_Version=7.0;server="publicIPAddress";port"portNumber";database=testing;uid=****;pwd=****;') 

尝试使用所有3个版本的TDS。

如果这是您公司的数据库,那么您很可能还必须允许通过互联网访问它。但要小心,这样做可能会产生后果,并允许入侵您的系统。您是否拥有可以为您处理此问题的IT团队?您似乎不熟悉如果做错了可能对您的公司造成的影响,因此我会利用您所拥有的任何熟练的IT资源来正确执行此操作。

您需要配置路由器以允许端口转发到您的数据库(通常是端口1433)。这是您将在上面的odbcDriverConnect调用中输入的端口号。然后,您还需要检查服务器的防火墙设置 - 我的理解是标准规则是阻止所有传入SQL Server的流量。这意味着您需要添加允许您的IP地址建立连接的入站规则。你在帖子中包含了shinyapps.io的链接...你是在shinyapps.io上托管这个应用程序还是只在你自己的计算机上?如果要部署到shinyapps.io,那么您还需要在上面提到的允许的入站连接中包含该文章中列出的那些IP。

我的建议是与您的IT部门合作,在您的防火墙上创建列入白名单的入站规则,该规则仅允许连接运行您的闪亮应用所需的IP。