问题描述
我正在尝试连接到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)
,
更新:
您对RODBC
和dbConnect
的呼叫不相同。在前者中,您将访问名为"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"