Tuesday, March 24, 2009

Use of XML File for dynamically storing Data and retriving Data in ASP.net with C#

Hi Friends,
XML is really an interesting file that you can use as a database in which you can store a set of data.Say for example in your website project you want to have a page through which a guest user can enter his name, email ID and his comments. Such data may not be commercial for you to store in your data base but at the same time you want to have it for goodwill purpose. Here is the solution, store it in an XML file and retrieve its node values on a web page, as cool as that.

Here is an example to show how it can be done.
Step1: Add a page within your solution with three text boxes to enter name(txtName), email(txtEmail) and comment(txtComment) also place a button for submit( btnSubmit) as shown in the image below. You may add required field validators too.





Step2: Add into your project solution an XML file and rename it (StoreUserInfo.xml). Create a root node into it
Step3: On button click paste the following code:

//protected void btnSubmit_Click(object sender, EventArgs e)
// {
XmlDocument oXmlDocument = new XmlDocument();

oXmlDocument.Load(@"D:\Sanju\XMLDb1\StoreUserInfo.xml");

XmlNode oXmlRootNode = oXmlDocument.SelectSingleNode("records");

XmlNode oXmlRecordNode = oXmlRootNode.AppendChild(oXmlDocument.CreateNode(
XmlNodeType.Element,"record", ""));

oXmlRecordNode.AppendChild(oXmlDocument.CreateNode(XmlNodeType.Element,
"Name","")).InnerText = txtName.Text;

oXmlRecordNode.AppendChild(oXmlDocument.CreateNode(XmlNodeType.Element,
"Email", "")).InnerText = txtEmail.Text;

oXmlRecordNode.AppendChild(oXmlDocument.CreateNode(XmlNodeType.Element,
"Comment", "")).InnerText = txtComment.Text;

oXmlDocument.Save(@"D:\Sanju\XMLDb1\StoreUserInfo.xml");

// }
Note: You have to specify the path of XML file correctly as per your project. In my case its D:\Sanju\XMLDb1\StoreUserInfo.xml it will be different for you.
This piece of code will automatically create the child nodes along with its values entered in the text boxes at each click of the submit button.

Step4: Once you have successfully submitted the records you will like to see all the submitted records on different web page but within same project solution. For that you add a new page in your project. Now you can display the data from XML file on text box, label or richtext box whereever you desire. In my example I will use both text box as well as Label controls. Design of my Display page is same as above page with an additional Label control.

Note: On the display page you will be needing one HiddenField control to keep count of the node no. before each post back occurs so as to track through the child nodes in the XML file.





protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Int32 j = 0;
Hidint.Value = Convert.ToString(j);
}
}

private int increment()
{
string strInput = Hidint.Value;
int incrValue = Convert.ToInt32(strInput);
incrValue += 1;
Hidint.Value = incrValue.ToString();
return incrValue;

}

protected void btnShow4mXML_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("StoreUserInfo.xml"));
Int32 i = increment();
DataTable dt = ds.Tables[0];
if (i <= dt.Rows.Count)
{
DataRow dr;
dr = dt.Rows[i-1];
txtName.Text = dr["name"].ToString();
txtEmail.Text = dr["email"].ToString();
txtComment.Text = dr["comment"].ToString();
Label1.Text = dr["comment"].ToString();
}
else
{
btnShow4mXML.Enabled = false;
}
}

No comments:

 
"The race of mankind would perish did they cease to aid each other. We cannot exist without mutual help. All therefore that need aid have a right to ask it from their fellow-men; and no one who has the power of granting can refuse it without guilt."