XML C# Tutorial

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Data;
using System.Data.OleDb;
    public class TableReader : XmlReader
    {
        private OleDbConnection cnn;
        private OleDbCommand cmd = new OleDbCommand();
        private OleDbDataReader reader;
        private int columnIndex = -1;
        private string strValue;
        public TableReader(string connectionString,string sql)
        {
            cnn = new OleDbConnection(connectionString);
            cmd.Connection = cnn;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.TableDirect;
            cnn.Open();
            reader = cmd.ExecuteReader();
        }
        public override int AttributeCount
        {
            get 
            {
                return reader.FieldCount;
            }
        }
        public override void Close()
        {
            reader.Close();
            cnn.Close();
        }
        public override int Depth
        {
            get 
            {
                return reader.Depth;
            }
        }
        public override string GetAttribute(int i)
        {
            return reader.GetValue(i).ToString();
        }
        public override string GetAttribute(string name)
        {
            return reader.GetValue(reader.GetOrdinal(name)).ToString();
        }
        public override bool MoveToAttribute(string name)
        {
            columnIndex = reader.GetOrdinal(name);
            return true;
        }
        public override bool MoveToElement()
        {
            columnIndex = -1;
            return true;
        }
        public override bool MoveToFirstAttribute()
        {
            columnIndex = 0;
            return true;
        }
        public override bool MoveToNextAttribute()
        {
            columnIndex++;
            if (columnIndex > reader.FieldCount - 1)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        public override bool Read()
        {
            columnIndex = -1;
            strValue = "";
            return reader.Read();
        }
        public override bool HasValue
        {
            get 
            {
                return reader.IsDBNull(columnIndex);
            }
        }
        public override bool ReadAttributeValue()
        {
            if (columnIndex < reader.FieldCount)
            {
                strValue = reader.GetValue(columnIndex).ToString();
                return true;
            }
            else
            {
                return false;
            }
        }
        public string Name
        {
            get
            {
                if (columnIndex == -1)
                {
                    return cmd.CommandText;
                }
                else
                {
                    return reader.GetName(columnIndex);
                }
            }
        }
        public override string Value
        {
            get 
            {
                return strValue;
            }
        }
        public override bool EOF
        {
            get
            {
                throw new Exception("not implemented.");
            }
        }
        public override string GetAttribute(string name, string namespaceURI)
        {
            throw new Exception("not implemented.");
        }
        public override bool MoveToAttribute(string name, string ns)
        {
            throw new Exception("not implemented.");
        }
        public override string BaseURI
        {
            get
            {
                throw new Exception("not implemented.");
            }
        }
        public override bool IsEmptyElement
        {
            get { throw new Exception("not implemented."); }
        }
        public override string LocalName
        {
            get { throw new Exception("not implemented."); }
        }
        public override string LookupNamespace(string prefix)
        {
            throw new Exception("not implemented.");
        }
        public override XmlNameTable NameTable
        {
            get { throw new Exception("not implemented."); }
        }
        public override string NamespaceURI
        {
            get { throw new Exception("not implemented."); }
        }
        public override XmlNodeType NodeType
        {
            get { throw new Exception("not implemented."); }
        }
        public override string Prefix
        {
            get { throw new Exception("not implemented."); }
        }
        public override ReadState ReadState
        {
            get { throw new Exception("not implemented."); }
        }
        public override void ResolveEntity()
        {
            throw new Exception("not implemented.");
        }
    }