Thursday, July 9, 2015

ReportingDashboard.Common.AbstractRepoBase.cs

using System.IO; // Memory Stream
using System.Text; // Encoding
using EdcReportingDashboard.Interfaces; // IRepoBase, ISqlCcc
using System.Xml; // XmlReader
using System.Xml.Linq; // XElement
using System.Data.SqlClient; // SqlConnection

namespace ReportingDashboard.Common
{
    public class AbstractRepoBase : IRepoBase
    {
        public string Connstr { get; set; }
        public ISqlCcc CmdStd { get; set; }
        public string Table { get; set; }
        public string TableIdFieldName {get; set;}

        public string baseXMl
        {
            get
            {
                return "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><root />";
            }
        }

        protected AbstractRepoBase(ISqlCcc cmdStd, string tableName, string tableIdField = "ID")
        {
            CmdStd = cmdStd;
            Connstr = cmdStd.ConnectionStr;
            Table = tableName;
            TableIdFieldName = tableIdField;
        }

        public XElement GetAllRecords()
        {
            var data = XElement.Load(
                            new MemoryStream(
                                Encoding.UTF8.GetBytes(baseXMl)));
            var pattern = ";WITH XMLNAMESPACES('xml' as dr) " +
                                "SELECT * FROM {0} " +
                                "FOR XML PATH ('dr:row'),Root('dr:rows');";

            var cmdText = string.Format(pattern, Table);

            using (var connection = new SqlConnection(Connstr))
            {
                var command = new SqlCommand(cmdText, connection);
                connection.Open();

                var reader = command.ExecuteXmlReader();
                reader.MoveToContent();

                var stringBytes = Encoding.UTF8.GetBytes(reader.ReadOuterXml());
                var strm = new MemoryStream();
                strm.Write(stringBytes, 0, stringBytes.Length);
                strm.Position = 0;

                connection.Close();

                if (strm.Length > 0)
                {
                    data = XElement.Load(XmlReader.Create(new StreamReader(strm)));
                }
            }
            return data;
        }

        public XElement GetRecordById(int id)
        {
            return GetRecordById(id, null);
        }

        public XElement GetRecordById(int id, string pattern = null)
        {
            var data = XElement.Load(new MemoryStream(Encoding.UTF8.GetBytes(baseXml)));

            if (string.IsNullOrEmpty(pattern))
            {
                pattern = ";WITH XMLNAMESPACES('xml' as dr) " +
                                "SELECT * FROM {0} " +
                                "WHERE {1} = {2} " +
                                "FOR XML PATH ('dr:row'),Root('dr:rows');";
            }

            var cmdText = string.Format(pattern, Table, TableIdFieldName, id);

            using (var connection = new SqlConnection(Connstr))
            {
                var command = new SqlCommand(cmdText, connection);
                connection.Open();

                var reader = command.ExecuteXmlReader();
                reader.MoveToContent();

                var stringBytes = Encoding.UTF8.GetBytes(reader.ReadOuterXml());
                var strm = new MemoryStream();
                strm.Write(stringBytes, 0, stringBytes.Length);
                strm.Position = 0;

                connection.Close();

                if (strm.Length > 0)
                {
                    data = XElement.Load(XmlReader.Create(new StreamReader(strm)));
                }
            }

            return data;
        }
    }
}

No comments:

Post a Comment