在本演示程序中,我们只是用程序目录下的一个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>