在本演示程序中,我們只是用程序目錄下的一個Access2000數據庫作為例子,因此也只調 用了LoadFromAccesss2000這個函數,其他的分析SQLSERVER和ORACLE的函數沒用到。在未來 當這個代碼生成器經過改善而投入實際應用時,它就能分析SQLSERVER和Oracle等企業級數據 庫了。
在主頁面xslcreatecode.ASPx中定義了一個GetXMLString函數,它能將一個對象 序列化成一個XML文檔。這裡的DataBaseInfo,TableInfo和FieldInfo都能XML序列化。在執 行XML序列化時,系統會分析對象類型,遍歷對象所有的公開字段和可讀寫屬性,然後將這些 屬性值輸出到XML文檔,若遇到對象樹狀結構,則會遞歸遍歷這個樹狀結構,對對象中的每一 個下屬對象都會建立一個XML子元素進行輸出。在這裡DataBaseInfo,TableInfo和FIEldInfo 構成了三層的樹狀結構,因此生成的XML文檔也是多層次的。
一般來說,序列化生成 的XML文檔中,XML元素的名稱等於對象類型的名稱和公開字段屬性的名稱,但可以通過添加 特性來改變這種默認行為,在類型TableInfo的定義前面加上了特性XmlType,在這裡指明了 為類型TableInfo生成的XML元素名稱不是對象類型名稱TableInfo,而是Table。
[System.Xml.Serialization.XMLType("Table")]
public class TableInfo
同樣的方式,我們為類型FIEldInfo指定了XML元素名稱為FIEld ,這裡展示了特性在C#中的應用。關於特性在未來的某節課程中將講到。
由於能執行 XML序列化的屬性必須是可讀寫的,因此在類型FIEldInfo中的IsString,IsInteger等屬性為 了能執行XML序列化,因此定義了毫無作用的set方法。
XSLT模板說明
程序目錄下 放置了一些以下劃線開頭的擴展名為XSLT的文件,這就是代碼生成器使用的代碼生成模板。 在主界面中使用不同的模板就能生成不同的代碼。在這裡我們以_cshaprhashtable.xslt為例 子進行說明。
_cshaprhashtable.xslt
首先我們在界面中選擇數據表Customers, 可以生成它的XML代碼為.
<Table xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Name>Customers</Name>
<FIElds>
<FIEld>
<Name>Address</Name>
<Remark>地址</Remark>
<FieldType>Char</FIEldType>
<IsString>true</IsString>
<IsInteger>false</IsInteger>
<IsBoolean>false</IsBoolean>
<IsNumberic>false</IsNumberic>
<IsDateTime>false</IsDateTime>
<IsBinary>false</IsBinary>
<ValueTypeName>System.String</ValueTypeName>
<FieldWidth>60</FIEldWidth>
<Nullable>true</Nullable>
<PrimaryKey>false</PrimaryKey>
<Indexed>false</Indexed>
</FIEld>
<FIEld>
<Name>City</Name>
<Remark>城市</Remark>
<FieldType>Char</FIEldType>
<IsString>true</IsString>
<IsInteger>false</IsInteger>
<IsBoolean>false</IsBoolean>
<IsNumberic>false</IsNumberic>
<IsDateTime>false</IsDateTime>
<IsBinary>false</IsBinary>
<ValueTypeName>System.String</ValueTypeName>
<FieldWidth>15</FIEldWidth>
<Nullable>true</Nullable>
<PrimaryKey>false</PrimaryKey>
<Indexed>false</Indexed>
</FIEld>
<Field>其他字段....</FIEld>
</FIElds>
< /Table>