1. 程式人生 > 其它 >PDF.NET(PWMIS資料開發框架)之SQL-MAP目標和規範

PDF.NET(PWMIS資料開發框架)之SQL-MAP目標和規範

SQL-MAP的目標:

  1. 集中管理SQL語句,所有SQL語句放在專門的配置檔案中進行管理;
  2. 通過替換SQL配置檔案,達到平滑切換資料庫到另外一個數據庫,比如從Oracle的應用移植到SQLSERVER;
  3. 由DBA來寫程式,對於複雜的查詢,DBA寫的SQL語句和儲存過程更有保障更有效率,SQL-MAP工具讓DBA也能夠寫.NET程式;
  4. 程式碼自動生成,由於在SQL配置檔案中指定了很多程式設計特性,所以可以使用專用工具將配置檔案對映到.NET程式碼;

PDF.NET 資料開發框架介紹(含例項程式下載)請看:

http://www.pwmis.com/sqlmap

SQL-MAP程式碼工具的詳細使用介紹(圖解)請看:

http://www.pwmis.com/sqlmap/toolshelp.htm ---------------------- SQL-MAP的規範: 1,通用配置:

SqlMap 配置節

EmbedAssemblySource 屬性:要將本文將嵌入的程式集名稱和資原始檔名稱,格式為: 程式集名稱,預設名稱空間.檔名.副檔名

如果要將配置檔案作為嵌入式檔案編譯,請指定該項值。該配置主要指導程式碼生成器生成相應的程式碼資訊。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:noNamespaceSchemaLocation="SqlMap.xsd"  

將這句話加入到這裡,可以使得SqlMap配置檔案編寫的時候具有智慧提示。需要在當前目錄下有sqlmap.xsd 檔案。

2,節點型別

SQL-MAP的資料CRUD操作型別(CommandClass 的子節點型別):           Select/Read:   選取資料操作;,           Update:         更新資料操作;           Insert/Create:新增資料操作;           Delete:          刪除資料操作。

 3,節點屬性:

注:<>表示必選屬性,[]表示可選屬性    <CommandName>:查詢的名字,對應於SqlMap資料實體類中的方法名;    <CommandType>:查詢命令型別,值為Text,StoredProcedure,TableDirect    [ParameterClass]:查詢引數類,在SQLMap 中表示為一個引數類;    <#ParaName[:System.Type[,System.DbType[,Size[,ParameterDirection[,Precision,Scale]]]]]#>:      ParaName:查詢語句中對應的引數名,如果名稱字首有 @@ 標記,表示該引數是一個替換引數,將忽略後面的定義;      System.Type:可選,符合CSL規範的型別(CLT)名稱;      System.DbType:可選,符合DbType 的列舉,如 AnsiString 等;      Size:可選,表示引數長度;      ParameterDirection:可選,表示引數的輸入輸出型別的列舉值      Precision:可選,表示引數的資料精度,通常用於Decimal型別      Scale:可選,表示引數的資料小數位,通常用於Decimal型別

{附註:

常用CLT:Byte,Int16,Int32,Int64,Single,Double,Boolean,Char,Decimal,String [關於通用型別系統(CLT):ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconthecommontypesystem.htm ] [DbType 列舉:ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemDataDbTypeClassTopic.htm ] }

    <Script > 配置節,除了有Type表面資料庫型別之外,還必須有 ConnectionString ="" Version="" 這樣的內容,否則,PdfCodeMaker.exe 程式碼生成不能生成程式碼檔案。    <ResultClass>:Select 查詢的結果型別,        如果返回單值的查詢,請指定 為 ResultClass="ValueType";        如果返回多個行結果集,可以指定 ResultClass="DataSet",將以System.Data.DataSet的方式填充;                                 也可以指定 ResultClass="EntityObject",那麼將結果填充到實體類中;                                 或者指定 ResultClass="EntityList",那麼將結果填充到實體類列表(集合)中。        注意:Insert/Update/Delete 操作型別不需要指定該屬性。    <ResultMap>:僅僅在ResultClass="EntityObject" / "EntityList" 有效,表示實體類查詢結果對映;                    通常表示返回單行(也可返回多行)記錄到一個數據實體物件的對映;                    例如 要將結果集影射到一個名為 UserInfo 的自定義實體類中,注意必須使用類的全名稱:                    ResultClass="EntityObject" ResultMap="MyDAL.UserInfo"

  [SqlPage]:是否允許SqlMap分頁,預設是False。該屬性僅供程式碼生成器使用,不過目前的程式碼生成器還沒有提供這樣的功能。

                  開啟該屬性之後,在SqlMapDAL類的方法中,引數中需要增加一個分頁資訊陣列,並且呼叫CommandInfo物件的SetPageInfo方法,如下面的例項程式碼(紅色的部分為需要增加的程式碼):

/// <summary>
        /// 返回成交明細(帶分頁)
        /// </summary>
        /// <param name="WhereString">查詢條件</param>
        /// <param name="pageInfo">設定分頁資訊,pageInfo[ 0]=記錄數量,pageInfo[ 1]=頁碼,pageInfo[ 2]=頁大小</param>
        /// <returns></returns>
        public DataSet GetTradeList(string WhereString, int[] pageInfo )
        {
            //獲取命令資訊
            CommandInfo cmdInfo = Mapper.GetCommandInfo("GetTradeList");
            //執行引數替換
            cmdInfo.SetParameterValue("WhereString", WhereString, enumParamType.ReplacedText);
            cmdInfo.SetPageInfo(pageinfo);
            //執行查詢
            return CurrentDataBase.ExecuteDataSet(CurrentDataBase.ConnectionString, cmdInfo.CommandType, cmdInfo.CommandText, null);
            //
        }//End Function

注意:你可以為你現有的SqlMapDAL方法增加一個過載,把這個過載的程式碼放入一個分部類檔案中,這樣就不用擔心程式碼生成器的影響了。

   4,版本記錄:                   ver 1.0.2 修改:    支援同名引數,如果指令碼中有多個同名引數,那麼首先處理遇到的第一個引數,忽略後面的同名引數定義;    支援引數“字串替換”,用於提供構造複雜動態SQL的支援,引數名用 % % 分割,      例如 : Where #%WhereString%# 或者 Where # %WhereString% # ,系統忽略空白字元。    ver 4.0 修改:    <SqlPage>:僅僅在 SqlPage="True" 的時候,程式碼生成器將生成支援分頁的DAL程式碼,具體過程就是在原有引數    的最後增加一個可選引數 params int[] pageInfo,並在方法體中增加  cmdInfo.SetPageInfo (pageInfo ) 語句。

SQL-MAP生成工具

1,在VS的IDE中使用XSD:

根據該規範寫了一個檢查配置檔案格式的XSD,檔案地址:

http://files.cnblogs.com/bluedoctor/SqlMap.xsd.xml

由於部落格園不允許上傳XSD格式的檔案,所以大家下載這個檔案以後把.xml字尾名去掉即可。

在編寫SQL-MAP配置檔案的時候,在VS2008的選單 “XML”-〉“架構”裡面,選擇這個檔案即可。這樣編寫配置檔案就可以有智慧提示了。

注意:如果下載了PDF.NET整合開發工具,在工具的安裝目錄下面,也有這個sqlmap.xsd 檔案。

2,使用SQL-MAP配置管理器:

這是一個視覺化的編輯程式,可以在PdfNet整合開發工具中找到,也可以在之前版本的示例程式包中找到。

下圖是一個SqlMap配置檔案跟程式結構的示意圖:

這個圖例中,SqlMap.config 檔案在SqlMapDAL目錄下,因此將這個檔案潛入式編譯的時候,它在程式集中的全名稱是“程式集預設名稱空間.SqlMapDAL.SqlMap.config” ,注意這個名字對大小寫敏感。EmbedAssemblySource的前面內容部分 “GroupStatistics.Repostitory” 是當前程式集的名稱。