如何创建ODBC连接到SAS?

7 投票
3 回答
13780 浏览
提问于 2025-04-15 19:52

我正在写一个程序,需要访问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 个回答

0

我对SAS一无所知,不过在ODBC中,用来快速连接数据库的函数是 SQLDriverConnect。你不需要(也不想)添加数据源名称(DSN),只需要安装好驱动程序就可以了。

1

我知道这个问题已经很久了,但它可能经常被提到,所以我想分享我知道的答案。你想要做的事情,最简单的方法就是创建一个叫做“无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

3

要想通过ODBC访问SAS数据,你需要连接到一个正在运行的SAS会话;也就是说,你不能直接用SAS的ODBC驱动程序访问SAS的数据表文件。

可以查看SAS ODBC驱动程序指南,里面有一部分是关于“我需要什么软件?”的。

你的问题没有说明你是否是通过一个正在运行的SAS产品来访问SAS数据。SAS ODBC驱动程序指南会告诉你如何根据你要连接的SAS产品来设置连接。

撰写回答