0

我正在尝试创建一个可以像可执行文件一样运行的 RScript 文件。我有连接到 Microsoft Azure SQL Server 数据库的 R 代码,该数据库使用活动目录密码身份验证、查询数据库并编写 csv 报告。我为数据库创建了一个 DSN,并使用以下代码在 RStudio.exe 和 RGui.exe 的 32 位和 64 位环境中成功连接到数据库:

library(DBI)
library(tidyverse)
library(profvis)

show("Library Installed...")

pause(2)

CON <- dbConnect(odbc::odbc(), "My_DSN", uid = "UserName", pwd = "Password", timeout = 10)

show("Database Connected...")

pause(2)

SQL <- "SELECT * FROM Table"

DATA <- dbGetQuery(CON, SQL)

show("Data Extracted...")

pause(2)

NAME = unique(DATA$Name)

DATA.INDIVIDUAL = list()
for (i in NAME){
  DATA.INDIVIDUAL[[i]] <- DATA %>% filter(Name == i) %>% select("Field1", "Field2", "Field3")
  write.csv(DATA.INDIVIDUAL[[i]], paste("C:/My Documents/", i, "/Report.csv", sep = ""), row.names = FALSE)
  show(paste("Exported",i))
  pause(2)
}

我还通过显式命名数据库来连接

library(DBI)
con <- dbConnect(odbc::odbc(), uid = "UserName", pwd = "Password", Driver = "ODBC Driver 17 for SQL Server", Server = "ServerName", Database = "DBName", Authentication = "ActiveDirectoryPassword")
show("Database Connected...")

但是,当我使用 RScript.exe 运行相同的代码(两个版本)时,NULL会打印到 RScript 命令行(在打印输出“Database Connected...”之前)并且应用程序退出而不完成我的其余代码. 为什么 Rstudio 和 RGui 可以连接,但 RScript 无法连接?为什么没有错误,只是NULL打印出来了?

感谢任何帮助!

4

1 回答 1

0

为了将来参考,我找到了原因。问题出在 odbc 驱动程序中,在没有用户界面的应用程序中,不会调用 CoInitialize。

https://github.com/r-dbi/odbc/issues/343

编辑:更新驱动程序解决了问题

于 2021-06-01T15:57:50.900 回答