分享通過JavaScript執行SQL語句

來源:互聯網
上載者:User

到微軟的網站上下載Windows Script Control,它是一個ActiveX(R) 控制項。下載安裝完成後,建立一個C#應用程式項目,在方案總管中選中引用節點, 右鍵點擊選擇添加引用菜單,彈出添加引用對話方塊,單擊瀏覽找到安裝Windows Script Control的目錄,選取msscript.ocx檔案確定。那麼在引用節點下會增加一個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。可讀寫。

方法

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 指令碼類型
        /// </summary>
        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);
        }

        /// <summary>
        /// 運行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();
        }
    }
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.