在R中使用RODBC连接到Azure SQL

时间:2016-04-15 06:43:06

标签: r rodbc

我正在使用R 3.2.4和El队长,我想使用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

3 个答案:

答案 0 :(得分:2)

所以经过大量的追踪和错误之后,我就拥有了这些:

1)Ditch 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)

答案 1 :(得分:1)

我安装了&#34; odbc&#34;库,并按照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)

答案 2 :(得分:1)

这是我的第一篇文章,因此请原谅。我已经针对使用Active Directory的Windows环境和Azure SQL服务器进行了设置。

针对此问题的攻击计划:

  • 首先尝试使用SQL Server Management Studio连接到Azure数据库。

  • 其次,尝试使用UInt32连接到Azure数据库。如果可行,您可以创建一个用户DSN,出于示例的原因,我将其称为type // No conditional define! Always TSmallPoint! TDM_Point = TSmallPoint; // 2 x 16 bit = 32 bit

  • 最终在R中使用begin X := TDM_Point(UInt32(Msg.lParam)).X; // or: TSmallPoint(UInt32(Msg.lParam)).X Y := TDM_Point(UInt32(Msg.lParam)).Y; // or: TSmallPoint(UInt32(Msg.lParam)).Y

首先尝试使用Sql Server Management Studio登录到Azure数据库。这涉及两个子步骤。

  1. 在目标数据库上,您的用户域和名称可能与您尝试连接到目标数据库的计算机上的用户域和名称不同。在这种情况下,请在Windows中使用凭据管理器创建凭据。

Creating a windows credential to match your identity with that used by the Azure database

  1. 从与SQL Server Management Studio连接时获得的对话框中验证身份验证方法。因此,在我的机器上,我看到Azure SQL服务器使用了一个名为“ Active Directory集成”的东西。

Select the method of authentication that applies

第二,与其直接使用RODBC调用进行测试,不如使用ODBC管理员。运行“ odbcad32”。您必须选择驱动程序。

如果要使用Active Directory进行身份验证,则需要“ SQL Server ODBC驱动程序13”。其他驱动程序,例如“ SQL Server”和“本机客户端”,不支持Active Directory。

创建一个用户DSN并进行测试。 The end result should look like this.

如果未获得理想的成功,则可能会收到以下错误消息。

If this occurs simply go ahead and install the required software

继续安装登录助手。

另一个可能弹出的错误是该错误,表明您尚未安装SQL Server的Active Directory身份验证库。如果您通过SQL Server Management Studio进行了设置,那么肯定不是这样。问题是odbcad32找不到example。解决方案是添加一些注册表项。

Which registry entries to add

附录:在某些人的下面,他们注意到它使用11.0驱动程序而不是13.0驱动程序。它们是完全正确的,但这是因为它们使用了用户/密码身份验证。如果服务器使用活动目录集成,则确实需要13.0或更高版本的ODBC驱动程序。