在 R 中使用 RODBC 连接到 Azure SQL
Using RODBC in R to connect to Azure SQL
我正在使用 R 3.2.4 和 El captain,我想使用 R 中的 RODBC 包连接到 Azure SQL,我按照以下步骤安装它
brew install unixodbc
install.packages("RODBC",type="source")
还有
brew install freetds --with-unixodbc
以上命令的输出:
Warning: unixodbc-2.3.4 already installed
Warning: freetds-0.95.80 already installed
但每当我尝试使用以下方式连接时:
library("RODBC")
con = odbcDriverConnect(
'driver = {SQL Server};
Server = xxxxxx;
Database = xxxxx;
User Id= xxxxx;
Password= xxxxx;')
我收到以下错误:
[RODBC] ERROR: state IM007, code 59478176, message [iODBC][Driver Manager]No data source or driver specified, dialog prohibited
所以经过大量的试验和错误之后,这就是我所拥有的:
1) 放弃 RODBC 并使用 RSQLServer
install.packages("RSQLServer")
创建一个名为 'sql.yaml' 的配置文件(使用 sublime),内容如下:
SQL_PROD:
server: 11.1.111.11
type: &type sqlserver
port: &port 1433
domain: &domain companyname
user: &user winusername
password: &pass winpassword
useNTLMv2: &ntlm true
SQL_DEV:
server: 11.1.111.15
type: *type
port: *port
domain: *domain
user: *user
password: *pass
useNTLMv2: *ntlm
AW:
server: <yourservername>
type: sqlserver
user: <username>
password: <password>
port: 1433
2) 将此 YAML 文件保存在以下位置(运行 R 中的以下位置:Sys.getenv("HOME"))例如:如果用户名是 dave,则其“/Users/dave"
3)
#############
# DBI #
#############
# Note we do not attach the RSQLServer package.
library(DBI)
# Connect to AW server in ~/sql.yaml
aw <- dbConnect(RSQLServer::SQLServer(), "AW", database = 'db')
# RSQLServer only returns tables with type TABLE and VIEW.
dbListTables(aw)
我安装了 "odbc" 库并按照 RStudio 页面上的描述设置了连接。 11.0 驱动程序为我工作。
library(odbc)
con <- dbConnect(odbc(),
Driver = "SQL Server Native Client 11.0",
Server = "servername",
Database = "databasename",
UID = "username",
#PWD = rstudioapi::askForPassword("Database password"),
PWD = "pwd",
Port = 1433)
这是我的第一个post,所以请原谅。我已将此设置用于 windows 环境和使用 Active Directory 的 Azure SQL 服务器。
这个问题的攻略方案:
首先尝试使用 SQL 服务器管理工作室连接到 Azure 数据库。
其次,尝试使用 odbcad32
连接到 Azure 数据库。如果可行,您可以创建一个用户 DSN,为示例起见,我将其称为 example
。
最后在R中使用odbcDriverConnect("DSN=example;")
首先尝试使用 Sql Server Management Studio 登录到 Azure 数据库。这涉及两个子步骤。
- 在目标数据库上,您的用户域和名称可能与您尝试连接到目标数据库的计算机上的用户域和名称不同。如果是这种情况,则使用 windows 中的凭据管理器创建一个凭据。
Creating a windows credential to match your identity with that used by the Azure database
- 从与 SQL 服务器管理工作室连接时出现的对话框中验证身份验证方法。因此,在我的机器上,我看到 Azure SQL 服务器使用了一个名为 'Active Directory Integration' 的东西。
Select the method of authentication that applies
其次,与其直接使用 RODBC 调用进行测试,不如使用 ODBC 管理器更方便。 运行 'odbcad32'。您必须选择驱动程序。
如果您想使用 Active Directory 进行身份验证,您需要 'ODBC Driver 13 for SQL Server'。其他驱动程序,例如 'SQL Server' 和 'Native Client' 不支持 Active Directory。
创建用户 DSN 并进行测试。
The end result should look like this.
如果您没有获得预期的成功,您可能会收到以下错误消息。
If this occurs simply go ahead and install the required software
继续安装登录助手。
另一个可能弹出的错误是提示您尚未为 SQL 服务器安装 Active Directory 身份验证库的错误。如果您通过 SQL server management studio 进行设置,那肯定不是这样。问题是 odbcad32
找不到 adalsql.dll
。解决方案是添加一些注册表项。
附录:下面有些人注意到他们使用 11.0 驱动程序而不是 13.0 驱动程序。他们是完全正确的,但那是因为他们使用用户/密码身份验证。如果您的服务器使用活动目录集成,您确实需要 13.0 或更高版本的 ODBC 驱动程序。
我正在使用 R 3.2.4 和 El captain,我想使用 R 中的 RODBC 包连接到 Azure SQL,我按照以下步骤安装它
brew install unixodbc
install.packages("RODBC",type="source")
还有
brew install freetds --with-unixodbc
以上命令的输出:
Warning: unixodbc-2.3.4 already installed
Warning: freetds-0.95.80 already installed
但每当我尝试使用以下方式连接时:
library("RODBC")
con = odbcDriverConnect(
'driver = {SQL Server};
Server = xxxxxx;
Database = xxxxx;
User Id= xxxxx;
Password= xxxxx;')
我收到以下错误:
[RODBC] ERROR: state IM007, code 59478176, message [iODBC][Driver Manager]No data source or driver specified, dialog prohibited
所以经过大量的试验和错误之后,这就是我所拥有的:
1) 放弃 RODBC 并使用 RSQLServer
install.packages("RSQLServer")
创建一个名为 'sql.yaml' 的配置文件(使用 sublime),内容如下:
SQL_PROD:
server: 11.1.111.11
type: &type sqlserver
port: &port 1433
domain: &domain companyname
user: &user winusername
password: &pass winpassword
useNTLMv2: &ntlm true
SQL_DEV:
server: 11.1.111.15
type: *type
port: *port
domain: *domain
user: *user
password: *pass
useNTLMv2: *ntlm
AW:
server: <yourservername>
type: sqlserver
user: <username>
password: <password>
port: 1433
2) 将此 YAML 文件保存在以下位置(运行 R 中的以下位置:Sys.getenv("HOME"))例如:如果用户名是 dave,则其“/Users/dave"
3)
#############
# DBI #
#############
# Note we do not attach the RSQLServer package.
library(DBI)
# Connect to AW server in ~/sql.yaml
aw <- dbConnect(RSQLServer::SQLServer(), "AW", database = 'db')
# RSQLServer only returns tables with type TABLE and VIEW.
dbListTables(aw)
我安装了 "odbc" 库并按照 RStudio 页面上的描述设置了连接。 11.0 驱动程序为我工作。
library(odbc)
con <- dbConnect(odbc(),
Driver = "SQL Server Native Client 11.0",
Server = "servername",
Database = "databasename",
UID = "username",
#PWD = rstudioapi::askForPassword("Database password"),
PWD = "pwd",
Port = 1433)
这是我的第一个post,所以请原谅。我已将此设置用于 windows 环境和使用 Active Directory 的 Azure SQL 服务器。
这个问题的攻略方案:
首先尝试使用 SQL 服务器管理工作室连接到 Azure 数据库。
其次,尝试使用
odbcad32
连接到 Azure 数据库。如果可行,您可以创建一个用户 DSN,为示例起见,我将其称为example
。最后在R中使用
odbcDriverConnect("DSN=example;")
首先尝试使用 Sql Server Management Studio 登录到 Azure 数据库。这涉及两个子步骤。
- 在目标数据库上,您的用户域和名称可能与您尝试连接到目标数据库的计算机上的用户域和名称不同。如果是这种情况,则使用 windows 中的凭据管理器创建一个凭据。
Creating a windows credential to match your identity with that used by the Azure database
- 从与 SQL 服务器管理工作室连接时出现的对话框中验证身份验证方法。因此,在我的机器上,我看到 Azure SQL 服务器使用了一个名为 'Active Directory Integration' 的东西。
Select the method of authentication that applies
其次,与其直接使用 RODBC 调用进行测试,不如使用 ODBC 管理器更方便。 运行 'odbcad32'。您必须选择驱动程序。
如果您想使用 Active Directory 进行身份验证,您需要 'ODBC Driver 13 for SQL Server'。其他驱动程序,例如 'SQL Server' 和 'Native Client' 不支持 Active Directory。
创建用户 DSN 并进行测试。 The end result should look like this.
如果您没有获得预期的成功,您可能会收到以下错误消息。
If this occurs simply go ahead and install the required software
继续安装登录助手。
另一个可能弹出的错误是提示您尚未为 SQL 服务器安装 Active Directory 身份验证库的错误。如果您通过 SQL server management studio 进行设置,那肯定不是这样。问题是 odbcad32
找不到 adalsql.dll
。解决方案是添加一些注册表项。
附录:下面有些人注意到他们使用 11.0 驱动程序而不是 13.0 驱动程序。他们是完全正确的,但那是因为他们使用用户/密码身份验证。如果您的服务器使用活动目录集成,您确实需要 13.0 或更高版本的 ODBC 驱动程序。