分享通过JavaScript执⾏SQL语句
到微软的⽹站上下载Windows Script Control,它是⼀个ActiveX(R) 控件。下载安装完成后,新建⼀个C#应⽤程序项⽬,在解决⽅案资源管理器中选中引⽤节点, 右键点击选择添加引⽤菜单,弹出添加引⽤对话框,单击浏览到安装Windows Script Control的⽬录,选取⽂件确定。那么在引⽤节点下会增加⼀个MSScriptControl组件。
ScriptControl 对⽀持 ActiveX(TM) Script 的宿主 Script 引擎提供简单接⼝。接下来我们对被转化成ScriptControlClass类的ScriptControl的属性和⽅法进⾏⼀些说明。
属性
AllowUI 属性:应⽤于 ScriptControl 本⾝或 Scirpt 引擎显⽰的⽤户界⾯元素,可读写。
CodeObject 属性:返回对象,该对象⽤于调⽤指定模块的公⽤成员。只读。
Error 属性:返回 Error 对象,其中包含所发⽣的最后⼀个错误的相关详细信息。只读。
Language 属性:设置或返回正在使⽤的 Script 语⾔名称。可读写。
Modules 属性:为 ScriptControl 对象返回模块集合。只读。
Procedures 属性:返回在指定模块中定义的过程集合。只读。
SitehWnd 属性:设置或返回窗⼝的 hWnd,通过执⾏ Script 代码,此窗⼝⽤于显⽰对话框和其他⽤户界⾯元素。可读写。
State 属性:设置或返回 ScriptControl 对象的模式。可读写。
Timeout 属性:设置或返回时间(毫秒),此时间后⽤户可选择中⽌ Script 代码的执⾏或允许代码继续执⾏。可读写。
UseSafeSubset 属性:设置或返回 Boolean 值,指明宿主应⽤程序是否有保密性要求。如果宿主应⽤程序需要安全控制,则UseSafeSubset 为 True,否则为 False。可读写。
javascript说明⽅法
AddCode ⽅法:向模块添加指定代码。可多次调⽤ AddCode ⽅法。
AddObject ⽅法:使主机对象模型对 Script 引擎可⽤。
Eval ⽅法:计算表达式并返回结果。
ExecuteStatement ⽅法:执⾏指定的语句。
Reset ⽅法:放弃所有已经添加到 ScriptControl 中的 Script 代码和对象。
Run ⽅法:运⾏指定过程。
事件
Error 事件:出现运⾏时错误时,发⽣此事件。
Timeout 事件:当超出了 Timeout 属性指定的时间且⽤户在结果对话框中选定了 End 时,发⽣此事件。
说明:
AllowUI 属性如果设置为false,则显⽰对话框之类的语句不起作⽤,如在 VBScript 中MsgBox 语句,JavaScript中的alert等,并且如果
执⾏的脚本超出TimeOut设置的毫秒数,也不会跳出超出时间提醒的对话框,反之则相反;重新设 置 Language 属性会清空AddCode加载的代码;对于TimeOut属性,发⽣超时时,ScriptControl 检查对象的 AllowUI 属性,确定是否允许显⽰⽤户界⾯元素。
为了使控件更容易使⽤,⽤ScriptEngine类封装⼀下,下⾯是完整代码:
using System;
using MSScriptControl;
using System.Text;
namespace LCS.Web
{
/// <summary>
/// 脚本类型
/// </summary>
public enum ScriptLanguage
{
/
// <summary>
/// JScript脚本语⾔
/// </summary>
JScript,
/// <summary>
/// VBscript脚本语⾔
/// </summary>
VBscript,
/// <summary>
/// JavaScript脚本语⾔
/// </summary>
JavaScript
}
/// <summary>
/// 脚本运⾏错误代理
/// </summary>
public delegate void RunErrorHandler();
/// <summary>
/// 脚本运⾏超时代理
/// </summary>
public delegate void RunTimeoutHandler();
/// <summary>
/
// ScriptEngine类
/// </summary>
public class ScriptEngine
{
private ScriptControl msc;
/// <summary>
/// 定义脚本运⾏错误事件
/// </summary>
public event RunErrorHandler RunError;
/// <summary>
/// 定义脚本运⾏超时事件
/
// </summary>
public event RunTimeoutHandler RunTimeout;
/// <summary>
///构造函数 默认为 VBscript 脚本类型
public ScriptEngine()
: this(ScriptLanguage.VBscript)
{ }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="language">脚本类型</param>
public ScriptEngine(ScriptLanguage language)
{
this.msc = new ScriptControlClass();
this.msc.UseSafeSubset = true;
this.msc.Language = language.ToString();
((DScriptControlSource_Event)this.msc).Error += new DScriptControlSource_ErrorEventHandler(OnError);
((DScriptControlSource_Event)this.msc).Timeout += new DScriptControlSource_TimeoutEventHandler(OnTimeout); }
/// <summary>
/// 运⾏Eval⽅法
/// </summary>
/// <param name="expression">表达式</param>
/// <param name="codeBody">函数体</param>
/// <returns>返回值object</returns>
public object Eval(string expression, string codeBody)
{
msc.AddCode(codeBody);
return msc.Eval(expression);
}
/// <summary>
/// 运⾏Eval⽅法
/// </summary>
/
// <param name="language">脚本语⾔</param>
/// <param name="expression">表达式</param>
/// <param name="codeBody">函数体</param>
/// <returns>返回值object</returns>
public object Eval(ScriptLanguage language, string expression, string codeBody)
{
if (this.Language != language)
this.Language = language;
return Eval(expression, codeBody);
}
/// <summary>
/
// 运⾏Run⽅法
/// </summary>
/// <param name="mainFunctionName">⼊⼝函数名称</param>
/// <param name="parameters">参数</param>
/// <param name="codeBody">函数体</param>
/// <returns>返回值object</returns>
public object Run(string mainFunctionName, object[] parameters, string codeBody)
{
this.msc.AddCode(codeBody);
return msc.Run(mainFunctionName,ref parameters);
}
/
// 运⾏Run⽅法
/// </summary>
/// <param name="language">脚本语⾔</param>
/// <param name="mainFunctionName">⼊⼝函数名称</param>
/// <param name="parameters">参数</param>
/// <param name="codeBody">函数体</param>
/// <returns>返回值object</returns>
public object Run(ScriptLanguage language, string mainFunctionName, object[] parameters, string codeBody) {
if (this.Language != language)
this.Language = language;
return Run(mainFunctionName, parameters, codeBody);
}
/// <summary>
/// 放弃所有已经添加到 ScriptControl 中的 Script 代码和对象
/// </summary>
public void Reset()
{
this.msc.Reset();
}
/// <summary>
/// 获取或设置脚本语⾔
/// </summary>
public ScriptLanguage Language
{
get { return (ScriptLanguage)Enum.Parse(typeof(ScriptLanguage), this.msc.Language, false); }
set { this.msc.Language = value.ToString(); }
}
/// <summary>
/// 获取或设置脚本执⾏时间,单位为毫秒
/// </summary>
public int Timeout
{
get { return 0; }
}
/// <summary>
/// 设置是否显⽰⽤户界⾯元素
/// </summary>
public bool AllowUI
{
get { return this.msc.AllowUI; }
set { this.msc.AllowUI = value; }
}
/// <summary>
/// 宿主应⽤程序是否有保密性要求
/
// </summary>
public bool UseSafeSubset
{
get { return this.msc.UseSafeSubset; }
set { this.msc.UseSafeSubset = true; }
}
/// <summary>
/// RunError事件激发
/// </summary>
private void OnError()
{
if (RunError != null)
RunError();
}
/// <summary>
/// OnTimeout事件激发 /// </summary>
private void OnTimeout() {
if (RunTimeout != null) RunTimeout();
}
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论