如何创建ODBC连接到SAS?
我正在写一个程序,需要访问SAS数据。我已经下载并安装了SAS的ODBC驱动,但我希望能够通过编程的方式动态创建ODBC连接。下面这段代码(用Python写的)看起来应该可以:
import ctypes
ODBC_ADD_DSN = 1
def add_dsn(name, driver, **kw):
nul, attrib = chr(0), []
kw['DSN'] = name
for attr, val in kw.iteritems():
attrib.append('%s=%s' % (attr, val))
return ctypes.windll.ODBCCP32.SQLConfigDataSource(0, ODBC_ADD_DSN, driver, nul.join(attrib)) == 1
print add_dsn('SAS Test', 'SAS', description = 'Testing SAS')
但是它会弹出SAS ODBC配置对话框,让我设置数据源名称,并且需要用户输入信息后才能关闭对话框。我该怎么做才能避免这个情况呢?
3 个回答
我对SAS一无所知,不过在ODBC中,用来快速连接数据库的函数是 SQLDriverConnect。你不需要(也不想)添加数据源名称(DSN),只需要安装好驱动程序就可以了。
我知道这个问题已经很久了,但它可能经常被提到,所以我想分享我知道的答案。你想要做的事情,最简单的方法就是创建一个叫做“无DSN连接”的东西。
简单来说,你需要创建一个连接字符串,这个字符串在打开连接时使用,它会告诉系统你要用哪个驱动程序,并且包含你通常在创建DSN时需要填写的所有参数。
这种方法已经存在很久了——我在2001年就开始使用它了,实际上它比这还要早。
下面是一些用于通过ODBC访问SAS数据的无DSN连接字符串示例:
使用服务器ID
Provider=sas.ShareProvider;Data Source=shr1;
SAS/SHARE
使用服务器ID和节点(网络名称)
Provider=sas.ShareProvider;Data Source=shr1;Location=lambchop.unx.sas.com;
SAS/SHARE
指定用户名和密码
Provider=sas.ShareProvider;Data Source=shr1;Location=lambchop.unx.sas.com;
User ID=myUsername;Password=myPassword;
SAS/SHARE
服务器需要密码
Provider=sas.ShareProvider;Data Source=shr1;Location=lambchop.unx.sas.com;
User ID=myUsername;Password=myPassword;
SAS Server Access Password=myServerPassword;
这些信息来自: https://www.connectionstrings.com/sas-share/
还有一个SAS支持页面对此进行了更多讨论——我在这里找到了: http://docslide.us/documents/opening-an-ado-connection-object.html
要想通过ODBC访问SAS数据,你需要连接到一个正在运行的SAS会话;也就是说,你不能直接用SAS的ODBC驱动程序访问SAS的数据表文件。
可以查看SAS ODBC驱动程序指南,里面有一部分是关于“我需要什么软件?”的。
你的问题没有说明你是否是通过一个正在运行的SAS产品来访问SAS数据。SAS ODBC驱动程序指南会告诉你如何根据你要连接的SAS产品来设置连接。