我的数据加载到使用Microsoft Windows Server 2012的远程桌面上的Micorsoft SQL服务器上。我想通过R访问数据。我知道可以通过RODBC使用
odbcConnect(dsn, uid="", pwd="")
但我对在dsn上输入的内容感到困惑。
答案 0 :(得分:4)
这取决于您是否要使用ODBC DSN或无DSN连接字符串,身份验证类型和驱动程序。
以下是使用域身份验证和SQL Server驱动程序的无DSN连接字符串示例:
odbcDriverConnect(connection="server=MYDB.mynet.tld;database=mydb_prod;trusted_connection=true;Port=1433;driver={SQL Server};TDS_Version=7.0;")
这是另一个例子,使用SQL身份验证和FreeTDS驱动程序(例如在Mac或Linux上)
odbcDriverConnect(connection="server=MYDB.mynet.tld;database=mydb_prod;uid=myuser;pwd=mypass;Port=1433;driver=FreeTDS;TDS_Version=7.0;")
有关“连接”元素的更多示例,请参阅http://www.connectionstrings.com/sql-server/。
这是我用来以跨平台方式打开连接的函数:
require(RODBC)
connect <- function(host, db, user=NULL, pass=NULL, platform="win" ){
# TODO: Check input paramaters and add a branch for SQL auth on windows
if(platform == "win")
{
c <- odbcDriverConnect(connection=paste0("server=",host,
";database=",db,
";trusted_connection=true;Port=1433;driver={SQL Server};TDS_Version=7.0;"))
if(class(c) == 'RODBC')
{
writeLines("Successfilly opened connection to db")
return(c)
}
else
{
writeLines(paste0("Error opening connection: ", as.character(c)))
}
}
if(platform == "mac")
{
c <- odbcDriverConnect(connection=paste0("server=",host,
";database=",db,
";uid=",user,
";pwd=",pass,
";Port=1433;driver=FreeTDS;TDS_Version=7.0;"))
if(class(c) == 'RODBC')
{
writeLines("Successfilly opened connection to db")
return(c)
}
else
{
writeLines(paste0("Error opening connection: ", as.character(c)))
}
}
}