Thao tác XML
XML và ADO.NET – Phần 3
Đọc và ghi một DiffGram
Một DiffGram là một tài liu XML chứa dliu trước và sau một đợt soạn
thảo. Nó có thể bao gồm c thay đi dliệu, thêm và xoá. Một DiffGram
thđược sử dụng như một sổ theo dõi để cho phép và phục hồi x lí.
DBMS được nhiều người sdụng, nhưng DBMS không có các đặc tính này,
nếu bạn sử dụng DBMS thì bn phải tự thực hiện các thao tác này.
dưới đây chỉ ra cách một DiffGram được tạo và một DataSet có thể được
tạo từ một DiffGram ( th được tìm thấy trong thư mục
ADOSample6).
Phn bắt đầu của mã trong rất quen thuộc. Chúng ta định nghĩa một DataSet
mới, ds, một SqlConnection mi, conn, một SqlDataAdapter mi, da.
Chúng ta kết nối sở dữ liệu, chọn tất ccác dòng tbảng Products, to
một DataTable mi đặt tên products, load dliệu t sở dữ liệu vào
DataSet:
private void button1_Click(object sender, System.EventArgs e)
{
//new DataSet
DataSet ds=new DataSet("XMLProducts");
//Make connection and load products rows
SqlConnection conn=new SqlConnection
(@"server=GLYNNJ_CS\NetSDK;uid=sa;pwd=;database=northwind");
SqlDataAdapter da=new SqlDataAdapter("SELECT * FROM
products",conn);
//fill the DataSet
da.Fill(ds,"products");
//edit first row
ds.Tables["products"].Rows[0]["ProductName"]="NewProdName";
Trong kng tiếp theo chúng ta làm hai việc. Trước tiên, chúng ta sửa
đổi cột ProductName trong dòng đầu tiên của NewProdName. Th hai,
chúng ta tạo mt dòng mi trong DataTable, đặt giá trcho các cột, và cui
cùng là thêm cácng dliệu cho DataTable.
//add new row
DataRow dr=ds.Tables["products"].NewRow();;
dr["ProductId"]=100;
dr["CategoryId"]=2;
dr["Discontinued"]=false;
dr["ProductName"]="This is the new product";
dr["QuantityPerUnit"]=12;
dr["ReorderLevel"]=1;
dr["SupplierId"]=12;
dr["UnitPrice"]=23;
dr["UnitsInStock"]=5;
dr["UnitsOnOrder"]=0;
ds.Tables["products"].Rows.Add(dr);
Khối tiếp theo là phần thú vị nhất. Trước tiên, chúng ta ghi li schema với
phương thức WriteXmlSchema(). quan trng bởi vì bn không thể đọc
li một DiffGram mà kng schema. WriteXml() vi tham số
XmlWriteMode.DiffGram tạo ra DiffGram. ng tiếp theo cho phép các
thay đổi được cập nhật. Quan trọng là DiffGram phi được tạo trước khi gọi
AcceptChanges(), mặt khác sẽ không có thay đổi trên dliệu.
//Write the Schema
ds.WriteXmlSchema("..\\..\\..\\diffgram.xsd");
//generate the DiffGram
ds.WriteXml("..\\..\\..\\diffgram.xml",XmlWriteMode.DiffGram);
ds.AcceptChanges();
//load data into grid
dataGrid1.DataSource=ds;
dataGrid1.DataMember="products";
//new XmlDataDocument
doc=new XmlDataDocument(ds);
//load the productnames in the list
XmlNodeList nodeLst=doc.SelectNodes("//ProductName");
foreach(XmlNode nd in nodeLst)
listBox1.Items.Add(nd.InnerXml);
}
Thứ tự để lấy dữ liệu vào một DataSet như sau:
DataSet dsNew=new DataSet();
dsNew.ReadXmlSchema("..\\..\\..\\diffgram.xsd");
dsNew.XmlRead("..\\..\\..\\diffgram.xml",XmlReadMode.DiffGram);
đây chúng ta tạo một DataSet, dsNew. Gọi phương thức
ReadXmlSchema() tạo một DataTable dựa trên thông tin schema. Trong
trường hợp này có thlà bng dliệu products. Giđây chúng ta thể