用ASP.NET寫個SQLSERVER的小工具


2001年4月份,我在博客中發過一個小工具,它是一個用ASP.NET寫的SQL SERVER的輔助小工具。 在這期間,有些人貌似對那個工具比較有興趣,所以我常能收到索要源代碼的郵件。 正好,我上月又發布了我的MVC框架,因此打算用【我的ASP.NET MVC框架】來重寫這個工具, 並開源。

工具的特點:
1. 采用ASP.NET編寫,並借助MyMVC框架
2. 為了更好地接近桌面程序的操作體驗,網站采用純AJAX的方式實現。
3. 界面使用了 JQuery Easy UI
4. 代碼的語法着色使用了 syntaxhighlighter (JavaScript類庫)

工具的定位:只是輔助工具,因此功能有限,但要將有限的功能做得盡量好。

下面將分別介紹工具所能完成的功能,以及關鍵的實現代碼。
說明:工具的所有源代碼可以在本文的結尾處下載。

項目介紹

整個工具的源代碼結構如下:

項目由Visual Studio 2008創建,包含三個部分:

1. WebApp:一個ASP.NET網站,它是工具的可運行部分。
   網站只包含一些HTML, CSS, JavaScript,DLL文件。

2. MyMvcEx:一個類庫項目,它提供了MyMVC框架的二個IActionResult接口的實現類,
   用於向瀏覽器客戶端輸出DataTable, DataSet

3. SqlServerSmallToolLib:運行網站所需的所有后台代碼,
   包括:Controller,BLL類,等等。

MyMVC框架發揮的作用

從前面的項目介紹中,我們可以看到,整個網站沒有一個ASPX文件,只有HTML文件,
所有對服務器的調用全由AJAX來實現,比如:下面的【比較數據庫】的代碼片段:

$.ajax({
    cache: false, dataType: "json", type: "GET",
    url: '/AjaxService/CompareDB.cspx',
    data:{  srcConnId: $("#hfSrcConnId").val(), 
            destConnId: $("#hfDestConnId").val(), 
            srcDB: $("#cboSrcDB").combobox("getValue"), 
            destDB: $("#cboDestDB").combobox("getValue") ,
            flag: flag
    },

在服務端,我只要實現這樣一個C#方法就可以響應客戶端的請求了:

[Action]
public object CompareDB(string srcConnId, string destConnId, string srcDB, string destDB, string flag)
{
    var result = CompareDBHelper.CompareDB(srcConnId, destConnId, srcDB, destDB, flag);
    return new JsonResult(result);
}

至於說:JS發起的請求是如何調用到這個C#方法的,以及這個C#方法在調用時的參數和返回值的處理,全由MyMVC框架來實現。
對於開發AJAX來說,可以不用關心這個問題,只要寫出一個C#方法給JS調用就可以了。

引用MyMVC是件很簡單的事情,只需要在web.config中做如下的配置即可:

<httpHandlers>
    <add path="*.cspx" verb="*" type="MyMVC.AjaxHandlerFactory, MyMVC" validate="true" />
</httpHandlers>

再補充一點:如果不喜歡看到Action方法包含較多的輸入參數,也可以使用下面的方法:

public class CompareDbOption
{
    public string SrcConnId;
    public string DestConnId;
    public string SrcDb;
    public string DestDb;
    public string Flag;
}


[Action]
public object CompareDB(CompareDbOption option)
{
    var result = CompareDBHelper.CompareDB(option.SrcConnId, option.DestConnId, 
                                            option.SrcDb, option.DestDb, option.Flag);
    return new JsonResult(result);
}

如果您喜歡在瀏覽器的客戶端中使用jquery以及jquery.form.js插件,
您會發現在服務端再借助MyMVC框架來實現AJAX實在是太方便了。
再來一個添加連接的代碼片段:

Html表單代碼:

JavaScript提交表單代碼:

function SubmitConnectionForm(){
    if( ValidateForm() == false ) return false;
    $("#formConnection").ajaxSubmit({
        success: function(responseText, statusText) {            
            if (responseText == "update OK" ){
                $('#divConnectionDialog').dialog('close');
                // 省略后面的代碼。

服務端C#代碼:

[Action]
public string SubmitConnectionInfo(ConnectionInfo info)
{
    if( string.IsNullOrEmpty(info.ServerIP) )
        throw new MyMessageException("ServerIP is empty.");

    if( info.SSPI == false && string.IsNullOrEmpty(info.UserName) )
        throw new MyMessageException("UserName is empty.");

    bool isAdd = string.IsNullOrEmpty(info.ConnectionId);

    if( isAdd ) {
        info.ConnectionId = Guid.NewGuid().ToString();
        ConnectionManager.AddConnection(info);
        return info.ConnectionId;
    }
    else {
        ConnectionManager.UpdateConnection(info);
        return "update OK";
    }
}


public sealed class ConnectionInfo
{
    public string ConnectionId;
    public string ServerIP;
    public string UserName;
    public string Password;
    public bool SSPI;
    public int Priority;
}

在整個工具的開發過程中,由於使用了MyMVC框架以及JQuery,AJAX的實現簡直是太容易了。

MyMVC框架的下載地址:http://www.cnblogs.com/fish-li/archive/2012/02/21/2361982.html

工具主界面

工具啟動后,將能看到下面的主界面:

主界面的左邊的【工具列表】中包含二個獨立的功能模塊。
右邊的上方區域是所有的數據庫連接的列表。
建議在初次使用時,將自己所需要訪問的SQL SERVER連接參數配置好。

這個工具可以管理多個連接,而且會根據連接的使用頻率來排序,以方便操作。
如果需要創建一個連接,可以點擊工具欄中的【新增連接】按鍵,將出現以下對話框。

工具可以支持二種連接方式:1. Windows信任連接,2. 用戶名/密碼連接。

數據庫連接列表的部分網頁代碼:

連接采用XML文件來保存,相關的操作代碼:

服務端的Action實現代碼:

Database 瀏覽器

在主界面的【數據庫連接列表】中,選擇一個連接,然后點擊工具欄上的【打開連接】按鍵,即可進入【Database 瀏覽器】界面。

在這個工具中,如果需要查看某個數據庫對象的定義,只需要點擊相應的對象節點就可以了:

為了操作方便,工具提供多標簽查看功能:

獲取數據庫對象列表的關鍵代碼:

查看數據庫對象的定義腳本的實現代碼:

搜索數據庫

您可以在上圖所示界面的左邊樹控件中,選擇一個節點,右擊,然后選擇“在數據庫中搜索”,此時會出現如下對話框:

在上圖的對話框中,點擊確定按鍵后,可出現下面的查找結果:
說明:匹配行就會高亮顯示。

搜索數據庫對象的相關代碼:

復制存儲過程工具

為了演示這個功能,先需要創建一個數據庫。我創建了一個數據庫:TestMyTool,它沒有任何數據庫對象,如下圖

然后,從主界面中啟動【復制存儲過程工具】,
接着選擇:數據庫連接,數據庫對象
點擊【刷新列表】按鍵,將看到以下結果:

我們可以選擇要復制的(存儲過程,視圖,自定義函數)對象:

最后點擊【開始復制】按鍵,即可完成復制過程。
此時數據庫TestMyTool的顯示結果為:

此功能的核心部分實現代碼:

數據庫比較工具

為了方便后面的介紹,我將復制全部的存儲過程到TestMyTool,這個過程將省略貼圖。
不僅如此,我還對其中的一個存儲過程做了一點修改。

然后,在程序主界面中,啟動【數據庫比較工具】,
接着選擇:數據庫連接,數據庫對象
點擊【開始比較數據庫】按鈕后,將能看到以下比較結果。
每個數據庫對象的定義中,第一個不匹配的行將以高亮行顯示。

為了能讓您知道不匹配行的出現位置,工具還會顯示不匹配行的前后5行代碼。

此功能的核心部分實現代碼:

查看表結構定義

工具可以讓您輕松地查看一個表結構的定義:

也可以一次查看多個表的定義:

還可一下子得到整個數據庫的所有對象的創建腳本:

此功能的核心部分實現代碼:

修改運行環境

到目前為止,這個工具還只能在Visual Studio中運行,顯然它與我們經常見到的【工具】有較大的差別。

如果您希望可以方便地運行這個工具,那么可以安裝我的另一個小工具來快速地啟動當前這個工具, 那個工具的下載地址:【ASP.NET程序也能像WinForm程序一樣運行】

然后,就可以在Windows資源管理器中啟動這個小工具:

現在是不是很像一個桌面程序了?

您甚至也可以創建一個開始菜單項,或者一個快捷方式來啟動這個小工具, 具體方法可參考博客:【ASP.NET程序也能像WinForm程序一樣運行】

關於此工具的補充說明

這個小工具只實現了一些簡單的功能,而且主要集中在查看數據庫的定義這塊。
這個工具的早期版本中,有些人提到了要求實現查看數據表的功能。
在今天的版本中,我並沒有實現,但我提供了實現這個功能所必要的一些基礎代碼。
例如,我提供了二個ActionResult (注意:前面小節的Action代碼中,就使用了下面的二個實現類):

為了方便地在客戶端將表格顯示地漂亮些,我還提供了一個JS函數:

function SetGridViewColor(){
    $("table.myGridVew").each(function(){
        $(this).removeClass("myGridVew").addClass("GridView")
            .find(">thead>tr").addClass("GridView_HeaderStyle").end()
            .find(">tbody>tr")
            .filter(':odd').addClass("GridView_AlternatingRowStyle").end()
            .filter(':even').addClass("GridView_RowStyle");
    });
}

如果您認為很有必要在這個工具中集成數據表的查看(或者查詢數據)的功能,那么可以自行實現(工具是開源的)。
友情提示:使用上面的代碼以及MyMVC框架,實現一個簡單的查看數據是會比較容易的。

今天就寫到這里,希望大家能喜歡這個小工具,以及 MyMVC框架

點擊此處下載全部代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM