One technique is to create an xml document out of data list and pass it in to stored procedure. With in the stored procedure we can do retrieve the table back
First I m preparing a data table, having separate recode for each student. and pass it to my method which retune the xml document.
xmlHelper c = new xmlHelper();
DataTable dt = new DataTable();
dt.Columns.Add("StudendID");
dt.Columns.Add("Name");
dt.Columns.Add("Math");
dt.Columns.Add("Science");
dt.Columns.Add("Engilsh");
DataRow dr = dt.NewRow();
dr["StudendID"] = "100";
dr["Name"] = "Annna";
dr["Math"] = "10";
dr["Science"] = "50";
dr["Engilsh"] = "45";
dt.Rows.Add(dr);
DataRow dr1 = dt.NewRow();
dr1["StudendID"] = "101";
dr1["Name"] = "Ronny";
dr1["Math"] = "70";
dr1["Science"] = "60";
dr1["Engilsh"] = "50";
dt.Rows.Add(dr1);
XmlDocument studentList= c.setXmlDoc(dt);
The data table to xml convertor methord is as follows.
public XmlDocument setXmlDoc(DataTable dtStudentMarkList)
{
XmlDocument xmlDoc = new XmlDocument();
string filename = "outputXML.xml";
XmlTextWriter xmlWriter = new XmlTextWriter(filename, System.Text.Encoding.UTF8);
xmlWriter.WriteStartElement("StudentmarkLsit");
xmlWriter.Close();
xmlDoc.Load(filename);
XmlNode root = xmlDoc.DocumentElement;
DataColumnCollection dc = dtStudentMarkList.Columns;
string[] arrr = new string[dtStudentMarkList.Columns.Count];
int a = 0;
foreach (DataColumn col in dc)
{
arrr[a++] = col.ColumnName;
}
foreach (DataRow drStudent in dtStudentMarkList.Rows)
{
XmlElement childNode = xmlDoc.CreateElement("Student");
for (int b = 0; b <>
{
XmlElement StudnetNode = xmlDoc.CreateElement(arrr[b].ToString());
XmlText textSubject = xmlDoc.CreateTextNode(drStudent[arrr[b].ToString()].ToString());
StudnetNode.AppendChild(textSubject);
childNode.AppendChild(StudnetNode);
root.AppendChild(childNode);
}
}
return xmlDoc;
}
Now you have the list of student marks in xml format. You can pass it as a string into a stored procedure and retrieve the data table back.
CREATE PROCEDURE [passingXml]
(
@studentmarkList VARCHAR(MAX),
)
AS
BEGIN
declare @xmlDoc as xml
set @xmlDoc =convert(xml,@ studentmarkList)
DECLARE @StudentMarks TABLE
(
[StudendID] varchar(max),
[Name] varchar(max),
[Math] varchar(max),
[Science] varchar(max) ,
[Engilsh] varchar(max)
)
INSERT INTO @ StudentMarks
([StudendID],[Name], [Math], [Science], [Engilsh])
SELECT
StudentTable. StudentTableColumn.value('./StudendID[1]','varchar(max)'),
StudentTable. StudentTableColumn.value('./Name[1]','varchar(max)') ,
StudentTable. StudentTableColumn.value('./ Science [1]','varchar(max)') ,
StudentTable. StudentTableColumn.value('./ Engilsh [1]','varchar(max)') ,
FROM
@xmlDoc.nodes('/StudentmarkLsit/Student') AS TemplateTable(TemplateColumn)
/*-----------------WHAT EVER THE LOGIC------------------------------------*/
END