Sử dụng một đối tượng XmlDataDocument để lưu một tài liệu XML

Một phần của tài liệu Phần 3: Lập trình Cơ sở dữ liệu nâng cao với ADO.NET_Chương 14 (Trang 102 - 107)

Trong mục trước đây, bạn xem xét cách sử dụng một đối tượng XmlDocument để lưu trữ một tài liệu XML chứa những chi tiết khách hàng truy xuất được từ một Dataset như thế nào. Điều này rất tốt, nhưng nó không phải là tuyệt nếu bạn có thể kết hợp sức mạnh của một XmlDocument với một Dataset sao? vâng , bạn có thể! Đó là nơi mà lớp XmlDataDocument đi vào.

Bạn sử dụng một đối tượng của lớp XmlDataDocument để truy cập những hàng như những đối tượng XmlNode lẫn những đối tượng DataRow có quan hệ. Bạn kết hợp một Dataset với XmlDataDocument của bạn bởi việc chuyễn Dataset của bạn tới bộ khởi dựng XmlDataDocument.

Một đối tượng XmlDataDocument cung cấp sự đồng bộ giữa Dataset và tài liệu XML. Chẳng hạn, nếu bạn thêm một khách hàng mới như một đối tượng XmlNode tới XmlDataDocument của bạn, Rồi khách hàng này cũng được thêm như một DataRow vào Dataset liên hệ của bạn. Tương tự, nếu bạn thêm một khách hàng mới như một DataRow vào Dataset của bạn, thì khách hàng này cũng được thêm như một đối tượng XmlNode trong tài liệu XML của XmlDataDocument. Đồng thời, nếu bạn cập nhật hay xóa một khách hàng, thì sự thay đổi này được thực hiện trong cả hai Dataset và XmlDataDocument.

Lớp XmlDataDocument được bắt nguồn từ lớp XmlDocument; bởi vậy lớp XmlDataDocument thừa kế tất cả những thuộc tính chung, những phương thức và những sự kiện được trình bày trong mục trước đây cho lớp XmlDocument. Thuộc tính Dataset (Tập dữ liệu kiểu) là thuộc tính được thêm vào lớp XmlDataDocument . Nó lấy đối tượng Dataset có lưu trữ sự trình bày mối quan hệ của dữ liệu. Bạn kềt hợp một Dataset với

XmlDataDocument của bạn bởi việc chuyển dataset tới bộ khởi dựng XmlDataDocument. Bảng 16.8 cho thấy những phương thức XmlDataDocument bổ sung.

Bảng 16.8: những phương thức XmlDataDocument

Phương thức Kiểu trả về Mô tả

GetElementFromRow() XmlElement Trả về đối tượng XmlElement có liên quan đến đối tượng DataRow được chỉ rõ.

GetRowFromElement() DataRow Trả về đối tượng DataRow có liên quan đến đối tượng XmlElement được chỉ rõ.

Load() void Bị quá tải. Tải thông tin từ nguồn dữ kiện chỉ định vào trong đối tượng XmlDataDocument và đồng bộ hóa dữ liệu được tải với Dataset.

Danh sách 16.18 cho thấy một chương trình minh họa sự sử dụng một XmlDataDocument. Chương trình này thực hiện những bước sau đây:

1. Tạo ra một đối tượng Dataset có tên myDataSet và điền đầy nó với một DataTable có tên customersDT có chứa hai hàng đầu tiên từ bảng những khách hàng.

2. Trình bày những đối tượng DataRow trong customersDT sử dụng phương thức DisplayDataRows() , được định nghĩa gần điểm khởi đầu của chương trình.

3. Tạo ra một đối tượng XmlDataDocument có tên myXDD, chuyển MyDataSet tới bộ khởi dựng; Điều này kết hợp myDataSet với XmlDataDocument.

4. Trình bày tài liệu XML trong myXDD bởi chuyển Console.Out tới phương thức Save() .

5. Thêm một DataRow khách hàng với một CustomerID là J9COM tới customersDT.

6. Truy xuất nút J9COM sử dụng phương thức GetElementFromRow() . Phương thức này chấp nhận một DataRow như một tham số và trả về XmlNode liên hệ.

7. Gán Country của nút J9COM tới USA, đầu tiên gán thuộc tính EnforceConstraints của đối tượng myDataSet tới false- mà bạn phải làm trước khi thực hiện bất kỳ sự thay đổi nào tới những nút. 8. Truy xuất ANATR XmlNode sử dụng SelectSingleNode().

9. Truy xuất ANATR DataRow sử dụng GetRowFromElement(). Phương thức này chấp nhận một XmlElement như một tham số và trả về DataRow có liên hệ.

10. Loại bỏ nút ANATR sử dụng RemoveAll().

11. Hiển thị tài liệu XML trong myXDD sử dụng Save().

12. Hiển thị những đối tượng DataRow trong customersDT sử dụng DisplayDataRows(). Danh sách 16.18: USINGXMLDATADOCUMENT.CS

/*

UsingXmlDataDocument.cs illustrates how to use an XmlDataDocument object */ using System; using System.Data; using System.Data.SqlClient; using System.Xml; class UsingXmlDataDocument {

public static void DisplayDataRows(DataTable myDataTable) {

Console.WriteLine("\n\nCustomer DataRow objects in customersDT:"); foreach (DataRow myDataRow in myDataTable.Rows)

{

foreach (DataColumn myDataColumn in myDataTable.Columns) { Console.WriteLine(myDataColumn + "= "+ myDataRow[myDataColumn]); } } }

public static void Main() {

SqlConnection mySqlConnection = new SqlConnection(

"server=localhost;database=Northwind;uid=sa;pwd=sa" );

SqlCommand mySqlCommand = mySqlConnection.CreateCommand(); mySqlCommand.CommandText =

"SELECT TOP 2 CustomerID, CompanyName, Country "+ "FROM Customers "+

"ORDER BY CustomerID";

mySqlDataAdapter.SelectCommand = mySqlCommand; // step 1: create a DataSet object and fill it with the top 2 rows // from the Customers table

DataSet myDataSet = new DataSet(); mySqlConnection.Open();

mySqlDataAdapter.Fill(myDataSet, "Customers"); mySqlConnection.Close();

DataTable customersDT = myDataSet.Tables["Customers"]; // step 2: display the DataRow objects in customersDT using // DisplayDataRows()

DisplayDataRows(customersDT);

// step 3: create an XmlDataDocument object, passing myDataSet // to the constructor; this associates myDataSet with the

// XmlDataDocument

XmlDataDocument myXDD = new XmlDataDocument(myDataSet); // step 4: display the XML document in myXDD

Console.WriteLine("\nXML document in myXDD:"); myXDD.Save(Console.Out);

// step 5: add a customer DataRow to customersDT with a CustomerID // of J9COM

Console.WriteLine("\n\nAdding new DataRow to customersDT with CustomerID of J9COM");

DataRow myDataRow = customersDT.NewRow(); myDataRow["CustomerID"] = "J9COM";

myDataRow["CompanyName"] = "J9 Company"; myDataRow["Country"] = "UK";

customersDT.Rows.Add(myDataRow);

// step 6: retrieve the J9COM node using GetElementFromRow()

Console.WriteLine("\nRetrieving J9COM node using GetElementFromRow()"); XmlNode myXmlNode = myXDD.GetElementFromRow(myDataRow);

Console.WriteLine("CustomerID = "+ myXmlNode.ChildNodes[0].InnerText); Console.WriteLine("CompanyName = "+ myXmlNode.ChildNodes[1].InnerText); Console.WriteLine("Country = "+ myXmlNode.ChildNodes[2].InnerText);

// step 7: set J9COM node's Country to USA, first setting // EnforceConstraints to false

Console.WriteLine("\nSetting J9COM node's Country to USA"); myDataSet.EnforceConstraints = false;

myXmlNode.ChildNodes[2].InnerText = "USA";

// step 8: retrieve the ANATR XmlNode using SelectSingleNode()

Console.WriteLine("\nRetrieving ANATR node using SelectSingleNode()"); myXmlNode =

myXDD.SelectSingleNode(

"/NewDataSet/Customers[CustomerID=\" ANATR\"]" );

// step 9: retrieve the ANATR DataRow using GetRowFromElement()

Console.WriteLine("\nRetrieving ANATR DataRow using GetRowFromElement()"); myDataRow =

myXDD.GetRowFromElement((XmlElement) myXmlNode); foreach (DataColumn myDataColumn in customersDT.Columns)

{

Console.WriteLine(myDataColumn + "= "+ myDataRow[myDataColumn]);

}

// step 10: remove the ANATR node using RemoveAll() Console.WriteLine("\nRemoving ANATR node"); myXmlNode.RemoveAll();

// step 11: display the XML document in myXDD using Save() Console.WriteLine("\nXML document in myXDD:");

myXDD.Save(Console.Out);

// step 12: display the DataRow objects in customersDT using // DisplayDataRows()

DisplayDataRows(customersDT); }

}

Đầu ra từ chương trình này như sau:

Customer DataRow objects in customersDT: CustomerID = ALFKI

CompanyName = Alfreds Futterkiste Country = Germany

CustomerID = ANATR

CompanyName = Ana Trujillo Emparedados y helados Country = Mexico XML document in myXDD: <?xml version="1.0" encoding="IBM437"?> <NewDataSet> <Customers> <CustomerID>ALFKI</CustomerID> <CompanyName>Alfreds Futterkiste</CompanyName> <Country>Germany</Country> </Customers> <Customers> <CustomerID>ANATR</CustomerID>

<CompanyName>Ana Trujillo Emparedados y helados</CompanyName> <Country>Mexico</Country>

</Customers> </NewDataSet>

Thêm DataRow mới vào customersDT với CustomerID J9COM Retrieving J9COM node using GetElementFromRow()

CustomerID = J9COM

CompanyName = J9 Company Country = UK

Setting J9COM node's Country to USA

Retrieving ANATR node using SelectSingleNode()

Retrieving ANATR DataRow using GetRowFromElement() CustomerID = ANATR

CompanyName = Ana Trujillo Emparedados y helados Country = Mexico

Removing ANATR node XML document in myXDD: <?xml version="1.0" encoding="IBM437"?> <NewDataSet> <Customers> <CustomerID>ALFKI</CustomerID> <CompanyName>Alfreds Futterkiste</CompanyName> <Country>Germany</Country> </Customers> <Customers> </Customers> <Customers> <CustomerID>J9COM</CustomerID> <CompanyName>J9 Company</CompanyName> <Country>USA</Country> </Customers> </NewDataSet>

Customer DataRow objects in customersDT: CustomerID = ALFKI

CompanyName = Alfreds Futterkiste Country = Germany CustomerID = CompanyName = Country = CustomerID = J9COM CompanyName = J9 Company Country = USA Tóm lược

Trong chương này, bạn đã học về sự hỗ trợ XML rộng lớn của máy chủ phục vụ SQL. Bạn cũng thấy cách lưu trữ XML ở một chương trình C# sử dụng những đối tượng XmlDocument và XmlDataDocument như thế nào. Máy chủ phục vụ SQL mở rộng phát biểu SELECT để cho phép bạn truy vấn sở dữ liệu và lấy về những kết quả như XML. Đặc biệt, bạn có thể thêm một mệnh đề XML vào cuối của một phát biểu SELECT, chỉ rõ Máy chủ phục vụ SQL sẽ trả về những kết quả như XML.

Bạn khảo sát Đường dẫn ngôn ngữ đánh dấu mở rộng (XPath) và sự Biến đổi ngôn ngữ Stylesheet mở rộng (XSLT). XPath là một ngôn ngữ cho phép bạn tìm kiếm và dẫn hướng một tài liệu XML sử dụng những biểu thức. XML là một cách ưu việt để trình bày dữ liệu trong một định dạng linh động, nhưng XML không chứa đựng thông tin về việc làm sao để định dạng dữ liệu này cho sự hiển thị. XSLT cho phép bạn kiểm soát việc định dạng của dữ liệu XML, và có thể dùng để thay đổi dữ liệu XML tới một định dạng thích hợp cho sự hiển thị. Bạn có thể truy cập máy chủ phục vụ SQL sử dụng HTTP (Giao thức chuyển đổi Siêu văn bản). Điều này cho phép bạn chạy những câu lệnh SQL từ một bộ duyệt; chẳng hạn, bạn có thể chạy một phát biểu SELECT mà trả về XML, và máy chủ phục vụ SQL sẽ trình bày những kết quả trong bộ duyệt của bạn. Bạn có thể sử dụng những phát biểu XPath để định vị dữ liệu trong XML được trả về, và sử dụng XSLT stylesheets để định dạng XML được trả về.

Máy chủ phục vụ SQL chứa một hàm có tên OPENXML() nó cho phép bạn đọc dữ liệu XML như thể nó là một tập hợp kết quả của những hàng. Một sử dụng của OPENXML() là đọc dữ liệu XML như những hàng và sau đó chèn những hàng đó vào trong một bảng.

Bạn sử dụng một đối tượng của lớp XmlDocument để đại diện cho một tài liệu XML trong một chương trình C#. Một đối tượng XmlDocument lưu trữ những nút của tài liệu XML trong những đối tượng của lớp XmlNode. Bạn có thể, chẳng hạn, tải những hàng từ cơ sở dữ liệu vào trong một Dataset, và rồi tải một sự trình bày XML của những hàng đó vào trong một đối tượng XmlDocument.

Bạn sử dụng một đối tượng của lớp XmlDataDocument để truy cập những hàng như cả những đối tượng XmlNode lẫn những đối tượng DataRow có quan hệ. Bạn kết hợp một Dataset với XmlDataDocument của bạn bởi việc chuyển Dataset của bạn tới bộ khởi dựng XmlDataDocument. Một đối tượng XmlDataDocument cung cấp sự đồng bộ giữa Dataset và tài liệu XML. Chẳng hạn, nếu bạn thêm một khách hàng mới như một đối tượng XmlNode tới XmlDataDocument của bạn , thì khách hàng này cũng được thêm như một DataRow vào Dataset liên hệ của bạn.

Trong chương kế tiếp, bạn sẽ học về những dịch vụ mạng .

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Một phần của tài liệu Phần 3: Lập trình Cơ sở dữ liệu nâng cao với ADO.NET_Chương 14 (Trang 102 - 107)

Tải bản đầy đủ (PDF)

(124 trang)