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代碼工具的詳細使用介紹(圖解)請看:
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>
/// <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,文件地址:
https://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” 是當前程序集的名稱。
浙公網安備 33010602011771號