将odbc :: dbconnect转换为rodbc :: odbcDriverConnect

问题描述

我正在尝试连接到SQL数据库。它通过RODBC包工作:

String room = "901";

String roomNumber = String.valueof(room.charAt(1)) + String.valueof(room.charAt(2));

如何使用odbc软件包建立连接?以下不起作用!

+

也:

ch = odbcDriverConnect(paste0("DSN=mydns.net;database=MasterData;UID=user;PWD=pass"))

ch
RODBC Connection 1
Details:
  case=nochange
  DSN=mydns.net
  database=MasterData
  UID=user
  PWD=******

我也尝试过相反的过程。对于另一个数据库,我有一个con = dbConnect(odbc(),Driver = "MSODBC",Server = "mydns.net",Database = "MasterData",UID = "user",PWD = "pass",encoding = "windows-1252",Port = 1433) Error: nanodbc/nanodbc.cpp:983: 00000: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Brugeren 'user' kunne ikke logge p�. [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Invalid connection string attribute. 连接,它运行良好:

odbc::odbcListDrivers()
         name   attribute                                                   value
1  PostgreSQL Description                                     ODBC for PostgreSQL
2  PostgreSQL      Driver                                   /usr/lib/psqlodbcw.so
3  PostgreSQL       Setup                                /usr/lib/libodbcpsqlS.so
4  PostgreSQL    Driver64                                 /usr/lib64/psqlodbcw.so
5  PostgreSQL     Setup64                              /usr/lib64/libodbcpsqlS.so
6  PostgreSQL   FileUsage                                                       1
7       MySQL Description                                          ODBC for MySQL
8       MySQL      Driver                                  /usr/lib/libmyodbc5.so
9       MySQL       Setup                                  /usr/lib/libodbcmyS.so
10      MySQL    Driver64                                /usr/lib64/libmyodbc5.so
11      MySQL     Setup64                                /usr/lib64/libodbcmyS.so
12      MySQL   FileUsage                                                       1
13    FreeTDS Description                                       FreeTDS for MSSQL
14    FreeTDS      Driver                                /usr/lib64/libtdsodbc.so
15    FreeTDS       Setup                                   /usr/lib64/libtdsS.so
16    FreeTDS    Driver64                                /usr/lib64/libtdsodbc.so
17    FreeTDS     Setup64                                   /usr/lib64/libtdsS.so
18    FreeTDS   FileUsage                                                       1
19    FreeTDS  UsageCount                                                       1
20     MSODBC Description                 Microsoft ODBC Driver 13 for SQL Server
21     MSODBC      Driver /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.9.1
22     MSODBC  UsageCount                                                       1

如果我使用ODBC包的概念并创建类似con <- dbConnect(odbc(),Server = "D.ad009.win.org",Database = "LCA",UID = "LCA-User",PWD = "xxxx",Port = 1433) 的东西:

RODBC

我也收到如下错误:

ch

因此,当我从ch = odbcDriverConnect(paste0("Driver=MSODBC;DSN=D.ad009.win.org;database=LCA;UID=LCA-User;PWD=xxxx")) 更改为Warning messages: 1: In odbcDriverConnect(paste0("Driver=MSODBC;DSN=D.ad009.win.org;database=LCA;UID=LCA-User;PWD=xxxx")) : [RODBC] ERROR: state 08001,code 0,message [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Neither DSN nor SERVER keyword supplied 2: In odbcDriverConnect(paste0("Driver=MSODBC;DSN=D.ad009.win.org;database=LCA;UID=LCA-User;PWD=xxxx")) : ODBC connection failed 时,我需要考虑一些事情。

解决方法

您可以尝试直接使用SQL Server驱动程序:

con <- dbConnect(odbc(),Driver = "SQL Server",Server = "mydns.net",Database = "MasterData",uid = "user",pwd = "pass",encoding = "windows-1252",Port = 1433)
,

更新

您对RODBCdbConnect的呼叫不相同。在前者中,您将访问名为"mydsn.net"的“数据源名称”(DSN),而在后者中,您将访问名为"mydsn.net"服务器主机。找到定义odbc.ini的{​​{1}}(在〜或/ etc中),然后查看在那里使用了哪些其他参数,这些参数可能为其他参数提供了线索。


我认为您需要更新[mydsn.net],错误消息很好地提示了它可能是什么:Driver=

不过,最终,请寻找"ODBC Driver 13 for SQL Server"软件包在您的系统上可以找到的内容。在我的身上,这就是我的发现:

odbc

(您自己使用subset(odbc::odbcListDrivers(),grepl("SQL Server",name)) # name attribute value # 1 SQL Server APILevel 2 # 2 SQL Server ConnectFunctions YYY # 3 SQL Server CPTimeout 60 # 4 SQL Server DriverODBCVer 03.50 # 5 SQL Server FileUsage 0 # 6 SQL Server SQLLevel 1 # 7 SQL Server UsageCount 1 # 33 ODBC Driver 17 for SQL Server UsageCount 1 # 34 ODBC Driver 17 for SQL Server APILevel 2 # 35 ODBC Driver 17 for SQL Server ConnectFunctions YYY # 36 ODBC Driver 17 for SQL Server CPTimeout 60 # 37 ODBC Driver 17 for SQL Server DriverODBCVer 03.80 # 38 ODBC Driver 17 for SQL Server FileUsage 0 # 39 ODBC Driver 17 for SQL Server SQLLevel 1 。我正在对其进行过滤,因为系统中还有很多其他内容会使页面混乱。)

对我来说,我应该使用odbc::odbcListDrivers()。 (我可以使用Driver="ODBC Driver 17 for SQL Server",但该驱动程序已损坏。)您的系统似乎默认使用该驱动程序的版本13;如果您要坚持使用或使用较新的版本,请交给您。

此外,需要像"SQL Server"一样将端口添加到server组件中。默认值为1433,因此除非使用非标准端口,否则您可以完全省略该参数。

这意味着您应该能够执行类似的操作

server="host,port"

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...