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