使用 shinyapps.io 时如何使用 odbcDriverConnect 显示通过 RODBC 从 SQL 检索的表

how to use odbcDriverConnect when using shinyapps.io to show the tables retrieving from SQL by means of RODBC

我刚刚问了一个关于 SQL 使用 shinyapps 时没有链接的问题。 。这是关于错误信息 "first argument is not an open rodbc channel" 当我尝试使用 shinyapps.io 共享我使用 RODBC 从 SQL 数据库获得的 SQL 查询结果时。

非常感谢 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 中找到了一些可能有用的信息。它说:"If your shiny application needs to access a database that you have running behind your organization’s firewall, your IT department will need to know which servers will be connecting through the firewall. Below are the shinyapps.io IP addresses you must whitelist:"。我不知道这是否与我的问题有关。如果可以,我该如何设置这些东西?

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

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

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

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

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

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