我在Windows 10机器上安装了64位R版本3.6.0。

我使用以下代码在我的机器上建立与本地MySQL数据库的连接

library(DBI)
con <- dbConnect( odbc::odbc(),"my_dsn")


其中,my_dsn是ODBC数据源管理器中定义的MySQL数据库的64位系统DSN。

在全新的R Studio或R GUI会话中执行此代码是可行的,并提供了预期的连接对象。所以我将代码保存到C:/some_folder_location/my_script.R的R脚本中。

现在,我希望从批处理文件中调用脚本。批处理文件包含以下代码:

cd /d C:\some_folder\
"C:\Program Files\R\R-3.6.0\bin\i386\Rscript.exe"  my_script.R
pause


执行批处理文件时,出现以下错误:


  错误:nanodbc / nanodbc.cpp:950:IM014:[Microsoft] [ODBC驱动程序
  管理员]指定的DSN包含架构之间的不匹配
  驱动程序和应用
  
  执行停止


所以我的问题是,为什么在由批处理文件执行时此代码突然不起作用?错误消息似乎表明DSN存在问题,但我们知道并非如此,原因是脚本直接从控制台运行而没有问题。

最佳答案

通常,该错误是由于32/64位驱动程序和32/64位平台不匹配而发生的。根据平台类型(32位和64位),您可能安装了两个版本的R(即,两个不同的Rscript.exe),而版本(3.2和3.5)进一步复杂了。例如:


您的Rscript.exe表示32位R版本的子文件夹i386与64位DSN不兼容。
您的RStudio和RGui可能正在运行与您的DSN兼容的64位R版本。用R.home()检查。
这与批处理文件夹相同吗?如果不是,请在此目录的bin中使用Rscript.exe


要在R GUI或批处理工具中检查可用数据源,请调用以下命令并比较结果:

library(odbc)

odbcListDataSources()    # SEE IF DSN SHOWS
odbcListDrivers()        # SEE IF DSN USES AVAILABLE DRIVER

关于mysql - 当从批处理文件调用的脚本执行R的dbConnect时,失败并显示“DSN错误”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58977932/

10-11 17:34