你可以参考下面的贴子,很详细。
http://expert.csdn.net/Expert/topic/1357/1357382.xml?temp=.8136865

解决方案 »

  1.   

    不是作为xml操作。好象原来看到过可一把一个xml文件当作一个数据库文件。
    用普通的数据库语句通过oledb来操作xml数据库?
      

  2.   

    有这样的方法吗?能通过oledb来操作XML的话太好了!
    学习!
      

  3.   

    应该是用dataset、dataview结合读写xml文件的方法操作的吧?下面是我的一段对以xml作为数据库的添加、编辑、删除的操作:
    <Script Language="C#" Runat="Server">
    DataSet ds;
    DataView dv;
    FileStream fout ;
    FileStream fin ;
    string SortField;
    string sPath;
    string datafile;
    ICollection CreateDataSource() {
          sPath = Server.MapPath("../qualification/qualification.xml") ;
       try
        {
                ds = new DataSet();
         fout = new FileStream(sPath,FileMode.Open, FileAccess.Read,FileShare.ReadWrite) ; 
                ds.ReadXml(fout, XmlReadMode.InferSchema);
    fout.Close();
    dv = ds.Tables[0].DefaultView;
                dv.Sort = "id ASC";
         }
        catch (Exception edd)
        {
    Label1.Text="不能读出XML文件,因为 "+edd.ToString() ;
           } 
            return dv;
        }
    public void Page_Load(Object src,EventArgs e){
                ds = new DataSet();
    fout = new FileStream(Server.MapPath("key.xml"),FileMode.Open, FileAccess.Read,FileShare.ReadWrite) ; 
    ds.ReadXml(fout);
    fout.Close();
    DataTable customerTable = ds.Tables[0];
    dv=new DataView(customerTable,"","redirect",DataViewRowState.CurrentRows);
    int rowIndex = dv.Find("managequalifi.aspx");
             DataRowView dr=dv[rowIndex];
           if (User.Identity.Name.ToString()!=dr["user"].ToString()){
    Response.Redirect("login.aspx");
    }
         if (!IsPostBack){
    BindGrid();
    }
     CreateDataSource();
         AddItem.Visible=false;
        }
    public void BindGrid() {
         MyDataGrid.DataSource = CreateDataSource();
            MyDataGrid.DataBind();
        }
    public void PanelShow(Object sender,EventArgs e)
    {
    vi.Visible = false;
    AddItem.Visible = true;
    Label1.Text= "";
    }
      

  4.   

    接上篇:
    public void AddItem_Click(Object sender,EventArgs e) {
      datafile="../qualification/qualification.xml";
        if (serial.Text=="") 
      {
       Label1.Text="编号不能为空!";
       AddItem.Visible = true;
       }
        else  {   
    try{
    Label1.Text="" ;
      fout= new FileStream(Server.MapPath(datafile),FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
    DataSet ds = new DataSet();
                ds.ReadXml(fout,XmlReadMode.InferSchema);
    fout.Close();
    DataRow newRow = ds.Tables[0].NewRow();
    newRow["id"]=serial.Text;
    newRow["otime"]=DateTime.Now.ToString("yyyy-M-d");
    newRow["intro"]=intro.Text;
    ds.Tables[0].Rows.Add(newRow);
                fin = new FileStream(Server.MapPath(datafile),FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
    ds.WriteXml(fin, XmlWriteMode.WriteSchema);
    fin.Close();
    Label1.Text="";
    serial.Text="";
    intro.Text="";
       }
    catch (Exception edd)
             {
    Label1.Text="不能写入XML文件,因为 "+edd.ToString() ;
             }
    vi.Visible = true;
        AddItem.Visible = false;
    BindGrid();
        }
     }
    void reset_Click(Object sender,EventArgs e)
      {
    serial.Text="";
    intro.Text="";
       vi.Visible = true;
       AddItem.Visible = false;
      }
    public void MyDataGrid_Delete(Object sender,DataGridCommandEventArgs e)
      {
    if(((LinkButton)e.CommandSource).CommandName == "del") 
    {
    int row = (int)e.Item.ItemIndex;
    dv.Delete(row);
            fin = new FileStream(Server.MapPath("../qualification/qualification.xml"),FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
        ds.WriteXml(fin, XmlWriteMode.WriteSchema);
        fin.Close();
            BindGrid();
        }
      }
    public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs e) {
            MyDataGrid.EditItemIndex = (int)e.Item.ItemIndex;
            BindGrid();
        }public void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e) {
            MyDataGrid.EditItemIndex = -1;
            BindGrid();
        }public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e) {
            string id = e.Item.Cells[2].Text;
            string intro = ((TextBox)e.Item.Cells[4].Controls[0]).Text;
            dv.RowFilter = "id='"+id+"'";
            if (dv.Count > 0) {
                dv.Delete(0);
            }
            dv.RowFilter = "";
    DataRow newRow = ds.Tables[0].NewRow();
    newRow["id"]=id;
    newRow["otime"]=DateTime.Now.ToString("yyyy-M-d");
    newRow["intro"]=intro;
    ds.Tables[0].Rows.Add(newRow);
                fin = new FileStream(Server.MapPath("../qualification/qualification.xml"),FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
    ds.WriteXml(fin, XmlWriteMode.WriteSchema);
    fin.Close();
            MyDataGrid.EditItemIndex = -1;
            BindGrid();
        }
    </script>
      

  5.   

    xml文件如下:
    <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="qualification">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="id" type="xs:string" minOccurs="0" />
                    <xs:element name="intro" type="xs:string" minOccurs="0" />
                    <xs:element name="otime" type="xs:string" minOccurs="0" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:schema>
      <qualification>
        <id>02</id>
        <intro>22</intro>
        <otime>2003-2-18</otime>
      </qualification>
      <qualification>
        <id>03</id>
        <intro>3333</intro>
        <otime>2003-2-18</otime>
      </qualification>
    </NewDataSet>
      

  6.   

    有一个叫EditXmlWithDataGrid的例子,很不错。你从网上找找看,
    如果找不到,告诉我,发给你