วันศุกร์ที่ 3 ตุลาคม พ.ศ. 2551

เกร็ดเล็กๆ น้อยๆ ของ XML กับ DataSet ใน .Net

- การอ่าน XML เข้ามาใน DataSet
DataSet ds = new DataSet();
ds.ReadXml("XmlFile.xml");
- เวลาเขียนข้อมูลใน DataSet เป็นไฟล์ XML ใช้คำสั่ง
ds.WriteXML("XmlFile.xml");
- ภายหลังเรียกคำสั่ง ReadXml ถ้ามี table อยู่ก่อนหน้าใน dataset ข้อมูลเก่าจะหาย ดังนั้นหากต้องการอ่านข้อมูลเข้าข้อมูลหลายๆ ตาราง ให้สร้าง DataSet 2 ตัวโดยให้ตัวหนึ่งอ่าน แล้วค่อย copy() table ไปยัง DataSet อีกตัวหนึ่ง
- การใช้คำสั่ง clone() ของ DataTable จะเป็นเพียงการสร้าง Table ใหม่ซึ่งมีโครงสร้างทุกอย่างเหมือน Table ต้นฉบับแต่ไม่ได้คัดลอกข้อมูลภายในมาด้วย
- การใช้คำสั่ง copy () ของ DataTable นั้นคล้ายกับ clone() แต่จะต่างกันตรงที่คำสั่ง copy() จะคัดลอกข้อมูลนั้นมาด้วย
- ชนิดของข้อมูลของ column ที่อยู่ภายใน table ซึ่งได้จากการอ่าน ReadXML จะมีเฉพาะ string เท่านั้น
- ข้อมูลใน XML ที่เขียนลงไฟล์จะมีเพียง Table เดียวเท่านั้นคือ table แรกที่อยู่ใน DataSet (หรือมีค่า index เป็น 0)
- หากต้องการหาข้อมูลที่อยู่ใน DataSet ทำได้สองวิธีคือ 1. ใช้คำสั่ง find และ 2. ใช้คำสั่ง select โดยแต่ละวิธีจะมีรายละเอียดดังนี้
1. หากใช้คำสั่ง find จะต้องทำการกำหนด PrimaryKey ให้กับ Table ที่ต้องการค้นหาข้อมูลก่อน ซึ่งจะต้องกำหนด Keys โดย Keys ที่จะกำหนดนั้นต้องมี DataType เป็น DataColumn[] (Array ของ DataColumn) เมื่อเขียน Code จะมีลักษณะดังนี้
public string GetData(String itemID)
{
DataColumn[] keys = new DataColumn[1];
keys[0] = dataSet1.Tables["TableName"].Columns["ColumnName"];
dataSet1.Tables["TableName"].PrimaryKey = keys;
DataRow findRow = dataSet1.Tables["TableName"].Rows.Find(itemId);
if (findRow != null)
{
return findRow["ItemName"].ToString();
}
else
return "";
}
2. การใช้คำสั่ง select จะมีรูปแบบเหมือนกับการ filter ข้อมูล ผลลัพธ์ที่ได้จะอยู่ในรูป array ของ DataRow (DataRow[]) Code การทำงานมีดังนี้
public string GetData(String itemID)
{
DataRow[] findRow = dataSet1.Tables["TableName"].Select("ColumnName=" + itemID);
if(findRow.Length != 0)
{
return findRow[0]["ColumnName"].ToString();
}
else
{
return null;
}

ไม่มีความคิดเห็น: