.net 之我见

为了生活

.net 利用DataSet存储为xml文件,自定义配置文

xml文件可以作为DataSet 的一种存储方式,因此我们可以将一些自定义的数据作为若干表放入DataSet,然后将DataSet的结构和数据写入到xml文件,当需要我们存储的数据时,只用将xml的文件里的数据读入DataSet,我们只用访问DataSet的表,及及相应的行就行了.若要修改数据,只需要改变DataSet中的表里面的行,然后写回xml就行了,由于xml是作为文件存储,因此在发布程序时,只需要随程序拷贝到相应的目录就行了,

下面是我的一个xml配置文件,建议用户不要自己编辑xml的结构,最好是用程序生成一个DataSet,里面定义若干表的信息然后写入xml中就行了,

//已调试可以直接运行

DataSet ds=new DataSet();
   DataTable dt=new DataTable("cfg");//表名
   DataColumn col=new DataColumn("id",typeof(long));
   col.AutoIncrement=true;//自动增长
   dt.Columns.Add(col);

   col=new DataColumn("userName",typeof(string));
   col.AllowDBNull=false;//不允许为空
   dt.Columns.Add(col);

   col=new DataColumn("age",typeof(int));
   col.DefaultValue=20;//默认值
   dt.Columns.Add(col);

   DataRow row=dt.NewRow();//添加行

   row["userName"]="hammergo";
   dt.Rows.Add(row);
  
   ds.Tables.Add(dt);

   ds.AcceptChanges();
  
   ds.WriteXml("config.xml",XmlWriteMode.WriteSchema);

 

//运行后生成的xml文件内容

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="zh-CN">
      <xs:complexType>
        <xs:choice maxOccurs="unbounded">
          <xs:element name="cfg">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="id" msdata:AutoIncrement="true" type="xs:long" minOccurs="0" />
                <xs:element name="userName" type="xs:string" />
                <xs:element name="age" type="xs:int" default="20" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <cfg>
    <id>0</id>
    <userName>hammergo</userName>
    <age>20</age>
  </cfg>
</NewDataSet>

//读取及修改xml文件

DataSet ds=new DataSet();
   ds.ReadXml("config.xml",XmlReadMode.ReadSchema);

   DataTable dt=ds.Tables["cfg"];//xml文件可保存一个DataSet的数据,它包括多个表

   //查找行
   DataRow []rows=dt.Select(string.Format("userName = '{0}'","hammergo"));
   if(rows.Length>0)
   {
    rows[0]["userName"]="zfking";
    rows[0].EndEdit();
   }

   //再添加一行
   DataRow row=dt.NewRow();
   row["userName"]="test";
   row["age"]=24;

   dt.Rows.Add(row);

   dt.AcceptChanges();


   //写回,覆盖的方式
   ds.WriteXml("config.xml",XmlWriteMode.WriteSchema);

//执行后的文件

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="zh-CN">
      <xs:complexType>
        <xs:choice maxOccurs="unbounded">
          <xs:element name="cfg">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="id" msdata:AutoIncrement="true" type="xs:long" minOccurs="0" />
                <xs:element name="userName" type="xs:string" />
                <xs:element name="age" type="xs:int" default="20" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <cfg>
    <id>0</id>
    <userName>zfking</userName>
    <age>20</age>
  </cfg>
  <cfg>
    <id>1</id>
    <userName>test</userName>
    <age>24</age>
  </cfg>
</NewDataSet>

//这样我们读取或修改自己的配置文件是不是很方便

 

posted on 2006-09-17 19:29  zfking  阅读(1269)  评论(5编辑  收藏  举报

导航