zoukankan      html  css  js  c++  java
  • C#操作SAS

    SAS数据分析,C#操作的一些辅助代码(重发)。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using SASWorkspaceManager;

    namespace SASShare
    {
        
    public class Connection
        
    {
            
    /// <summary>
            
    /// 默认创建本地连接
            
    /// </summary>

            public Connection()
                : 
    this(null0"""", Protocols.ProtocolBridge)
            
    {}

            
    public Connection(string serverIP, short serverPort, string userName, string userPass, Protocols protocols)
            
    {
                
    this._serverIP = serverIP;
                
    this._serverPort = serverPort;
                
    this._userName = userName;
                
    this._userPassword = userPass;
                
    this._protocals = protocols;
            }


            
    private string _serverIP = string.Empty, _userName = string.Empty, _userPassword = string.Empty;
            
    /// <summary>
            
    /// 用户密码
            
    /// </summary>

            public string UserPassword
            
    {
                
    get return _userPassword; }
                
    set { _userPassword = value; }
            }

            
    /// <summary>
            
    /// 用户名
            
    /// </summary>

            public string UserName
            
    {
                
    get return _userName; }
                
    set { _userName = value; }
            }

            
    /// <summary>
            
    /// 服务器地址
            
    /// </summary>

            public string ServerIP
            
    {
                
    get return _serverIP; }
                
    set { _serverIP = value; }
            }

            
    private short _serverPort;
            
    /// <summary>
            
    /// 连接端口号
            
    /// </summary>

            public short ServerPort
            
    {
                
    get return _serverPort; }
                
    set { _serverPort = value; }
            }


            
    private Protocols _protocals;
            
    /// <summary>
            
    /// 连接协议
            
    /// </summary>

            public Protocols Protocals
            
    {
                
    get return _protocals; }
                
    set { _protocals = value; }
            }


            
    public SASProvider CreateSASProvider()
            
    {
                
    return new SASProvider(this);
            }

        }

    }

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using SASWorkspaceManager;
    using SAS;
    using System.IO;
    using System.Data.OleDb;

    namespace SASShare
    {
        
    public class SASProvider
        
    {
            
    private IWorkspace workSpace;
            
    public IWorkspace WorkSpace
            
    {
                
    get return workSpace; }
                
    set { workSpace = value; }
            }


            
    private Connection _connection;

            
    public Connection Connection
            
    {
                
    get return _connection; }
            }

            
    string message;

            WorkspaceManager _workspaceManager 
    = new SASWorkspaceManager.WorkspaceManager();

            
    public delegate void SASErrorEventHandler(object sender, SASErrorEventArgs args);

            
    /// <summary>
            
    /// 执行出错事件
            
    /// </summary>

            public event SASErrorEventHandler OnError;

            
    internal SASProvider(Connection connection)
            
    {
                _connection 
    = connection;
            }


            
    /// <summary>
            
    /// 运行SAS程序
            
    /// </summary>
            
    /// <param name="sasCommand"></param>

            public void Submit(string sasCommand)
            
    {
                IServerDef2 _serverDef 
    = null;
                
    if (!string.IsNullOrEmpty(_connection.ServerIP))
                
    {
                    _serverDef 
    = new SASWorkspaceManager.ServerDefClass();
                    _serverDef.Port 
    = Connection.ServerPort;
                    _serverDef.Protocol 
    = Connection.Protocals;
                    _serverDef.MachineDNSName 
    = Connection.ServerIP;
                }

                workSpace 
    = _workspaceManager.Workspaces.CreateWorkspaceByServer("_LOCAL_", SASWorkspaceManager.Visibility.VisibilityProcess, _serverDef, _connection.UserName, _connection.UserPassword, out message);
                
    try
                
    {
                    workSpace.LanguageService.Submit(sasCommand);
                }

                
    catch (Exception e)
                
    {
                    FireEvent(
    this, e);
                }

                
    finally
                
    {
                    workSpace.Close();
                }

            }


            
    /// <summary>
            
    /// 运行SAS文件
            
    /// </summary>
            
    /// <param name="path"></param>

            public void RunSasFile(string path)
            
    {
                
    if (File.Exists(path))
                
    {
                    
    string command = File.ReadAllText(path);
                    Submit(command);
                }

            }


            
    /// <summary>
            
    /// 查询结果集
            
    /// </summary>
            
    /// <param name="libname">分配逻辑库引用名</param>
            
    /// <param name="command"></param>
            
    /// <returns></returns>

            public System.Data.DataSet GetResults(string libname, string command)
            
    {
                System.Data.DataSet ds 
    = new System.Data.DataSet();
                OleDbConnection conn 
    = getConnection();
                OleDbCommand cmd 
    = new OleDbCommand(libname, conn);
                OleDbDataAdapter da 
    = new OleDbDataAdapter(command, conn);
                
    try
                
    {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    da.Fill(ds);
                }

                
    catch (Exception e)
                
    {
                    FireEvent(
    this, e);
                }

                
    finally
                
    {
                    conn.Close();
                }


                
    return ds;
            }


            
    /// <summary>
            
    /// 查询单个结果
            
    /// </summary>
            
    /// <param name="libname">分配逻辑库引用名</param>
            
    /// <returns></returns>

            public object GetResult(string libname, string selectCommand)
            
    {
                
    object result = null;
                OleDbConnection conn 
    = getConnection();
                OleDbCommand cmd 
    = new OleDbCommand(libname, conn);
                
    try
                
    {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    cmd.CommandText 
    = selectCommand;
                    result 
    = cmd.ExecuteScalar();
                }

                
    catch (Exception e)
                
    {
                    FireEvent(
    this, e);
                }

                
    finally
                
    {
                    conn.Close();
                }

                
    return result;
            }

            
    /// <summary>
            
    /// 执行增删改操作
            
    /// </summary>
            
    /// <param name="libname">分配逻辑库引用名</param>
            
    /// <param name="command"></param>
            
    /// <returns></returns>

            public int Execute(string libname, string command)
            
    {
                
    int result = 0;
                OleDbConnection conn 
    = getConnection();
                OleDbCommand cmd 
    = new OleDbCommand(libname, conn);
                
    try
                
    {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    cmd.CommandText 
    = command;
                    result 
    = cmd.ExecuteNonQuery();
                }

                
    catch (Exception e)
                
    {
                    FireEvent(
    this, e);
                }

                
    finally
                
    {
                    conn.Close();
                }

                
    return result;
            }


            
    private OleDbConnection getConnection()
            
    {
                
    string connString;
                
    if (string.IsNullOrEmpty(Connection.ServerIP))
                    connString 
    = "Provider=sas.IOMProvider.1; Data Source=_LOCAL_ ;";
                
    else
                
    {
                    connString 
    = string.Format("Provider=sas.IOMProvider.1;Data Source={0};SAS Port={1};SAS Machine DNS Name={2};SAS Protocol={3};User ID={4};Password={5};", Connection.ServerIP, Connection.ServerPort, Connection.ServerIP, Convert.ToInt32(Connection.Protocals), Connection.UserName, Connection.UserPassword);
                }

                
    return new OleDbConnection(connString);
            }


            
    private void FireEvent(object sender, Exception e)
            
    {
                
    if (OnError != null)
                
    {
                    OnError(sender, 
    new SASErrorEventArgs { Exception = e });
                }

            }

        }


        
    public class SASErrorEventArgs
        
    {
            
    public Exception Exception;
        }

    }

  • 相关阅读:
    基于分布式思想下的RPC解决方案--笔记
    前端对页面展示修改出现的问题------行内块元素(标签)、行内元素(标签)、块元素(标签)的区别
    POI读取带有图片(图片有的是合并单元格的)的商品列表Excel
    Springboot 默认加载文件(可直接访问、不可直接访问)是出现的问题
    for循环快还是递归快
    try catch finally 中遇到的return问题(经典)
    为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作
    数据结构Java实现03----单向链表的插入和删除
    匿名内部类详解(粗略)
    非法字符: 'ufeff' idea下的解决方案
  • 原文地址:https://www.cnblogs.com/heros/p/1505844.html
Copyright © 2011-2022 走看看