using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
SASWorkspaceManager;
namespace
SASShare
{
public
class
Connection
{
///
<summary>
///
默认创建本地连接
///
</summary>
public
Connection()
:
this
(
null
,
0
,
""
,
""
, 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