在学习c#与XML的时候有这样一个实际问题,该问题是根据XML配置文件实现通用查询功能。有一个XML配置文件,要根据这个配置文件来连接数据库、并且动态生成控件、以及显示搜索结果。
由于本人水平实在有限,所以一些基础问题在此提出,请大家予以帮助和指点,在此谢谢大家!目前我可以根据这个配置文件的<DataBaseConfig>字段的内容连接数据库,但是到了下面 <SearchColumns>节点和 <DisplayInfo>节点时候我有点糊涂,不知道怎样实现了。对于<SearchColumns>节点 它的元素都是column,所以我可以创建一个类数组,将XML文件中该字段的每一行解析成一个类,然后存入类数组,等调用的时候在提取数组中的类来实现一些操作(比如根据这个类生成控件),但是到了<DisplayInfo>节点,有不同的元素,这样就不能存入一个类数组了,不知道怎么解决了。
所以想请教大家,请大家帮我看看。以上是我对于这个问题的理解以及能想到的解决方法,如过您有更好的解决方案请您一定予以指点,谢谢!!!
config.xml
========================
<?xml version="1.0" encoding="utf-8"?>
<DataBaseConfig>
<DBConnectionsInfoConfig>
<DataBaseDetail id="1" type="System.Data.SqlClient.SqlConnection" conn_string="server=;uid=sa;pwd=;database=Northwind;enlist=true"/>
<DataBaseDetail id="2" type="System.Data.SqlClient.SqlConnection" conn_string="server=;uid=sa;pwd=;database=Shipping;enlist=true"/>
<DataBaseDetail id="3" type="System.Data.SqlClient.SqlConnection" conn_string="server=;uid=sa;pwd=;database=Aircraft;enlist=true"/>
</DBConnectionsInfoConfig>
<SearchColumns>
<column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="字段1" displayType="1" searchType="and" dataBase="1" tableName="Table1">itemsetupid</column>
<column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="字段2" displayType="2" searchType="or" dataBase="1" tableName="Table2">itemid</column>
<column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="字段3" displayType="3" searchType="like" dataBase="1" tableName="Table4">teamcode</column>
<column dataType="System.String" size="10" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="字段4" displayType="1" searchType="大于" dataBase="2" tableName="Table10">localetask</column>
<column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="" displayType="1" searchType="小于" dataBase="2" tableName="Table5">submatid</column>
<column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="" displayType="1" searchType="等于" dataBase="2" tableName="Table1">declareid</column>
<column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="" displayType="3" searchType="and" dataBase="3" tableName="Table1">materialid</column>
<column dataType="System.String" size="10" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="" displayType="2" searchType="like" dataBase="3" tableName="Table5">materialkind</column>
</SearchColumns>
<DisplayInfo>
<SQLInfo orderby="DataTime desc" groupby="ID">select Northwind.itemsetupid, Shipping.ArriveTime from Northwind n,Shipping s on n.ID=s.ID</SQLInfo>
<column dataType="System.String" size="100" displayColor="" nameCH="字段1" dataBase="Northwind" tableName="Table1">itemsetupid</column>
<column dataType="System.String" size="100" displayColor="" nameCH="字段2" dataBase="Northwind" tableName="Table2">itemid</column>
<column dataType="System.DateTime" size="8" displayColor="" nameCH="字段3" dataBase="Shipping" tableName="Table4">ArriveTime</column>
<column dataType="System.String" size="10" displayColor="" nameCH="字段4" dataBase="Aircraft" tableName="Table10">localetask</column>
<column dataType="System.Int" size="4" displayColor="" nameCH="字段5" dataBase="Aircraft" tableName="Table6">teamcode</column>
</DisplayInfo>
</DataBaseConfig>============================对此配置文件的解释:
<DBConnectionsInfoConfig>节点:用于连接数据库
id属性=数据库id type=数据库类型 conn_string=连接字符串<SearchColumns>节点:用于描述搜索字段
dataType=字段数据类型 size=字段长度 displayX和displayY=待生成动态控件位置坐标
labelX和labelY=控件的Label位置坐标 nameCH=字段的中文描述 displayType=显示方式(比如1=comboBox)
searchType=搜索类型(暂时不用) dataBase=数据库id tableName=表名 <DisplayInfo>节点:用于显示结果
orderby=排序 groupby=分组 displayColor显示颜色
由于本人水平实在有限,所以一些基础问题在此提出,请大家予以帮助和指点,在此谢谢大家!目前我可以根据这个配置文件的<DataBaseConfig>字段的内容连接数据库,但是到了下面 <SearchColumns>节点和 <DisplayInfo>节点时候我有点糊涂,不知道怎样实现了。对于<SearchColumns>节点 它的元素都是column,所以我可以创建一个类数组,将XML文件中该字段的每一行解析成一个类,然后存入类数组,等调用的时候在提取数组中的类来实现一些操作(比如根据这个类生成控件),但是到了<DisplayInfo>节点,有不同的元素,这样就不能存入一个类数组了,不知道怎么解决了。
所以想请教大家,请大家帮我看看。以上是我对于这个问题的理解以及能想到的解决方法,如过您有更好的解决方案请您一定予以指点,谢谢!!!
config.xml
========================
<?xml version="1.0" encoding="utf-8"?>
<DataBaseConfig>
<DBConnectionsInfoConfig>
<DataBaseDetail id="1" type="System.Data.SqlClient.SqlConnection" conn_string="server=;uid=sa;pwd=;database=Northwind;enlist=true"/>
<DataBaseDetail id="2" type="System.Data.SqlClient.SqlConnection" conn_string="server=;uid=sa;pwd=;database=Shipping;enlist=true"/>
<DataBaseDetail id="3" type="System.Data.SqlClient.SqlConnection" conn_string="server=;uid=sa;pwd=;database=Aircraft;enlist=true"/>
</DBConnectionsInfoConfig>
<SearchColumns>
<column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="字段1" displayType="1" searchType="and" dataBase="1" tableName="Table1">itemsetupid</column>
<column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="字段2" displayType="2" searchType="or" dataBase="1" tableName="Table2">itemid</column>
<column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="字段3" displayType="3" searchType="like" dataBase="1" tableName="Table4">teamcode</column>
<column dataType="System.String" size="10" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="字段4" displayType="1" searchType="大于" dataBase="2" tableName="Table10">localetask</column>
<column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="" displayType="1" searchType="小于" dataBase="2" tableName="Table5">submatid</column>
<column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="" displayType="1" searchType="等于" dataBase="2" tableName="Table1">declareid</column>
<column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="" displayType="3" searchType="and" dataBase="3" tableName="Table1">materialid</column>
<column dataType="System.String" size="10" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="" displayType="2" searchType="like" dataBase="3" tableName="Table5">materialkind</column>
</SearchColumns>
<DisplayInfo>
<SQLInfo orderby="DataTime desc" groupby="ID">select Northwind.itemsetupid, Shipping.ArriveTime from Northwind n,Shipping s on n.ID=s.ID</SQLInfo>
<column dataType="System.String" size="100" displayColor="" nameCH="字段1" dataBase="Northwind" tableName="Table1">itemsetupid</column>
<column dataType="System.String" size="100" displayColor="" nameCH="字段2" dataBase="Northwind" tableName="Table2">itemid</column>
<column dataType="System.DateTime" size="8" displayColor="" nameCH="字段3" dataBase="Shipping" tableName="Table4">ArriveTime</column>
<column dataType="System.String" size="10" displayColor="" nameCH="字段4" dataBase="Aircraft" tableName="Table10">localetask</column>
<column dataType="System.Int" size="4" displayColor="" nameCH="字段5" dataBase="Aircraft" tableName="Table6">teamcode</column>
</DisplayInfo>
</DataBaseConfig>============================对此配置文件的解释:
<DBConnectionsInfoConfig>节点:用于连接数据库
id属性=数据库id type=数据库类型 conn_string=连接字符串<SearchColumns>节点:用于描述搜索字段
dataType=字段数据类型 size=字段长度 displayX和displayY=待生成动态控件位置坐标
labelX和labelY=控件的Label位置坐标 nameCH=字段的中文描述 displayType=显示方式(比如1=comboBox)
searchType=搜索类型(暂时不用) dataBase=数据库id tableName=表名 <DisplayInfo>节点:用于显示结果
orderby=排序 groupby=分组 displayColor显示颜色
个类只读取自己那块内容,做个config类,写3个属性get方法获取那3个类的值。
我是这么想的,也不知道合不合理