XmlDataAdapter

发表于:2007-06-30来源:作者:点击数: 标签:
using System; using System.Data; using System.Data.Common; using System.Collections; using System.Xml; using System.Xml. XP ath; namespace System.Data.XmlClient { public class XmlDataAdapter : DataAdapter { // Constructors public XmlDataAda
using System;
using System.Data;
using System.Data.Common;
using System.Collections;
using System.Xml;
using System.Xml.XPath;

namespace System.Data.XmlClient
{
    public class XmlDataAdapter : DataAdapter
    {
    // Constructors
    public XmlDataAdapter()
        {
        }

    public XmlDataAdapter(XmlCommand selectCommand)
    {
      _selectCommand = selectCommand;
    }

    public XmlDataAdapter(string selectCommandText)
    {
      _selectCommand = new XmlCommand(selectCommandText, new XmlConnection());
    }

    public XmlDataAdapter(string selectCommandText, XmlConnection selectConnection)
    {
      _selectCommand = new XmlCommand(selectCommandText, selectConnection);
    }

    ////////////////////
    // Properties
    ////////////////////

    public XmlCommand SelectCommand
    {
      get { return _selectCommand;  }
      set { _selectCommand = value; }
    }

    ////////////////////
    // DataAdapter
    ////////////////////

    public override int Fill (DataSet dataSet)
    {
      // Empty the DataSet
      ClearDataSet(dataSet);

      // Fill the DataSet
      dataSet.ReadXml(GetXmlReader());

      // Count the Rows
      int returnVal = 0;
      foreach (DataTable tbl in dataSet.Tables)
      {
        returnVal += tbl.Rows.Count;
      }
      return returnVal;
    }

    public override DataTable[] FillSchema( DataSet dataSet, SchemaType schemaType )
    {
      // Empty the DataSet
      ClearDataSet(dataSet);

      // Fill the DataSet@#s Schema
      dataSet.ReadXmlSchema(GetXmlReader());

      // Make copy of all the Tables (schema only)
      IEnumerator tableEnum = dataSet.Tables.GetEnumerator();
      DataTable[] aTables = new DataTable[dataSet.Tables.Count];
      for (int x = 0; x < dataSet.Tables.Count; ++x)
      {
        aTables[x] = dataSet.Tables[x];
      }
      return aTables;
    }

    public override IDataParameter[] GetFillParameters()
    {
      throw new InvalidOperationException("XmlClient Provider does not support this function");
    }

    public override int Update( DataSet dataSet )
    {
      throw new InvalidOperationException("XmlClient Provider does not support updating, reading only.");
    }

    public new DataTableMappingCollection TableMappings
    {
      get { throw new InvalidOperationException("XmlClient Provider does not support this property"); }
    }

    ////////////////////
    // Internal Methods
    ////////////////////

    internal XmlReader GetXmlReader()
    {
      // Open the XML Document with an URL (from the XmlCommand)
      XmlDocument doc = _selectCommand._connection._doc;
      XmlNode node = doc.SelectSingleNode(_selectCommand._commandText);
      if (node == null) return null;
      XmlNodeReader rdr = new XmlNodeReader(node);
      return (XmlReader) rdr;
    }

    internal void ClearDataSet(DataSet dataSet)
    {
      dataSet.Reset();
    }

    ////////////////////
    // Internal Data Members
    ////////////////////
    internal XmlCommand _selectCommand = null;
  }
}

原文转自:http://www.ltesting.net