PDF.NET(PWMIS資料開發框架)之SQL-MAP目標和規範
SQL-MAP的目標:
- 集中管理SQL語句,所有SQL語句放在專門的配置檔案中進行管理;
- 通過替換SQL配置檔案,達到平滑切換資料庫到另外一個數據庫,比如從Oracle的應用移植到SQLSERVER;
- 由DBA來寫程式,對於複雜的查詢,DBA寫的SQL語句和儲存過程更有保障更有效率,SQL-MAP工具讓DBA也能夠寫.NET程式;
- 程式碼自動生成,由於在SQL配置檔案中指定了很多程式設計特性,所以可以使用專用工具將配置檔案對映到.NET程式碼;
PDF.NET 資料開發框架介紹(含例項程式下載)請看:
SQL-MAP程式碼工具的詳細使用介紹(圖解)請看:
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” 是當前程式集的名稱。