从.Net中的SAS数据源读取数据

时间:2010-01-13 11:58:57

标签: c# asp.net visual-studio visual-studio-2005 sas

我被要求在ASP.Net应用程序中从SAS读取一些数据。我已经为Windows Forms应用程序编写了代码。但是相同的代码不能在ASP.Net中工作,但我可以试试。具有相同引用的干净项目始终失败。

以下是我为连接所做的事情:

    SASWorkspaceManager.WorkspaceManager oWorkspaceManager
        = new SASWorkspaceManager.WorkspaceManager();
    string xmlInfo = "";

    SASWorkspaceManager.ServerDef oServerDef = new SASWorkspaceManager.ServerDef();
    oServerDef.MachineDNSName = "server";
    oServerDef.Protocol = SASWorkspaceManager.Protocols.ProtocolBridge;
    oServerDef.Port = <port>;
    oServerDef.BridgeEncryptionAlgorithm = "SASProprietary";
    oServerDef.BridgeEncryptionLevel = 
        SASWorkspaceManager.EncryptionLevels.EncryptUserAndPassword;

    SAS.Workspace oSASWorkspace = 
        oWorkspaceManager.Workspaces.CreateWorkspaceByServer ("", 
        SASWorkspaceManager.Visibility.VisibilityProcess, oServerDef, "user",
        "pass", out xmlInfo);

    oSASWorkspace.LanguageService.Submit(
        "proc means data = sashelp.class;output out=meanout;run;");
    OleDbDataAdapter oOleDbDataAdapter = new OleDbDataAdapter
                            ("select * from work.meanout",
        "provider=sas.iomprovider.1; SAS Workspace ID=" + 
        oSASWorkspace.UniqueIdentifier);
    DataSet oDS = new DataSet();
    oOleDbDataAdapter.Fill(oDS, "sasdata");

    oWorkspaceManager.Workspaces.RemoveWorkspaceByUUID(
        oSASWorkspace.UniqueIdentifier);
    oSASWorkspace.Close();

只是它没有初始化数据适配器的内部异常 “试图读取或写入受保护的内存。这通常表明其他内存已损坏。”如果我在web.config文件中添加Trust = Full,我在填充数据适配器时会直接得到相同的错误。我们可以证明通过工作区管理器执行SAS命令是有效的,当我们尝试读取结果时,它会在初始化与SAS的连接时失败。无论出于何种原因,片段

OleDbDataAdapter oOleDbDataAdapter = new OleDbDataAdapter
                        (<Read Command>,
    "provider=sas.iomprovider.1; SAS Workspace ID=" + 
    oSASWorkspace.UniqueIdentifier);

似乎在任何地方都被引用,因为如何在通过ASP.Net运行时不断引发错误。

我猜这是一个用户权限问题,它不喜欢在IIS用户下运行,但不知道需要授予它的权限。某些SAS文档或其他(抱歉,找不到)建议确保用户具有权限,但ASPNET用户确实可以完全访问dev计算机上的整个SAS程序目录。有谁知道我还需要设置什么?感谢。

3 个答案:

答案 0 :(得分:0)

您使用的是哪个版本的SAS?从9.13开始,不推荐使用WorkspaceManager,而使用ObjectManagerMulti(或9.2中的ObjectManagerMulti2)。我不确定这会解决你的错误。

答案 1 :(得分:0)

asp服务器是否在另一台机器上。如果是这样,并且可能无论如何,您将需要许可SAS Integration Technologies。有关血淋淋的详细信息,请参阅在线文档。

答案 2 :(得分:0)

在IIS中运行类似的东西时遇到了几个问题。首先,您必须在管理工具中调整SAS工作区组件的权限 - &gt;组件服务。您必须为运行应用程序池的用户添加权限。这将在组件的属性窗口下 - &gt;安全标签 - &gt;启动和激活权限,以及访问权限。

我最终还是要修改配置中的SASUSER目录,因为网络服务没有访问权限。

C:\ Program Files \ SASHome \ SASFoundation \ 9.3 \ nls \ en \ sasv9.cfg

/ * - SASUSER&#34;?CSIDL_PERSONAL \我的SAS文件\ 9.3&#34; * / -SASUSER&#34; c:\ sasuser&#34;