1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Using XPath to Query Data in a DataSet doc

4 443 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Using XPath to Query Data in a Dataset
Tác giả Team Lib
Trường học Northwind University
Chuyên ngành Computer Science
Thể loại Tài liệu
Năm xuất bản 2025
Thành phố Seattle
Định dạng
Số trang 4
Dung lượng 15,68 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

[ Team LiB ]Recipe 8.6 Using XPath to Query Data in a DataSet Problem You need to use an XPath expression to extract certain rows from a DataSet.. The sample code contains two event ha

Trang 1

[ Team LiB ]

Recipe 8.6 Using XPath to Query Data in a DataSet

Problem

You need to use an XPath expression to extract certain rows from a DataSet

Solution

Use SelectSingleNode( ) or SelectNodes( )

The sample code contains two event handlers:

Form.Load

Sets up the sample by creating a DataSet containing the Orders table and Order Details table from Northwind and a nested relation between the two tables

Go Button.Click

Executes an XPath query to retrieve the Orders and Order Details data for an OrderID specified by the user to an XmlNode The results are displayed by

iterating over the XmlNode to retrieve the Orders and the XmlNodeList containing the Order Details

The C# code is shown in Example 8-9

Example 8-9 File: XPathQueryForm.cs

// Namespaces, variables, and constants

using System;

using System.Configuration;

using System.Windows.Forms;

using System.Text;

using System.Xml;

using System.Data;

using System.Data.SqlClient;

// Table name constants

Trang 2

private const String ORDERS_TABLE = "Orders";

private const String ORDERDETAILS_TABLE = "OrderDetails";

// Relation name constants

private const String ORDERS_ORDERDETAILS_RELATION =

"Orders_OrderDetails_Relation";

// Field name constants

private const String ORDERID_FIELD = "OrderID";

private DataSet ds;

//

private void XPathQueryForm_Load(object sender, System.EventArgs e) {

ds = new DataSet("Orders_OrderDetails");

SqlDataAdapter da;

// Fill the Order table and add it to the DataSet

da = new SqlDataAdapter("SELECT * FROM Orders",

ConfigurationSettings.AppSettings["Sql_ConnectString"]);

DataTable orderTable = new DataTable(ORDERS_TABLE);

da.Fill(orderTable);

ds.Tables.Add(orderTable);

// Fill the OrderDetails table and add it to the DataSet

da = new SqlDataAdapter("SELECT * FROM [Order Details]",

ConfigurationSettings.AppSettings["Sql_ConnectString"]);

DataTable orderDetailTable = new DataTable(ORDERDETAILS_TABLE); da.Fill(orderDetailTable);

ds.Tables.Add(orderDetailTable);

// Create a relation between the tables

ds.Relations.Add(ORDERS_ORDERDETAILS_RELATION,

ds.Tables[ORDERS_TABLE].Columns[ORDERID_FIELD],

ds.Tables[ORDERDETAILS_TABLE].Columns[ORDERID_FIELD], true);

ds.Relations[ORDERS_ORDERDETAILS_RELATION].Nested = true; }

private void goButton_Click(object sender, System.EventArgs e)

Trang 3

{

int orderId = 0;

// Get the user-entered Order ID

try

{

orderId = Int32.Parse(orderIdTextBox.Text);

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

return;

}

// Use an XPath query to select the order

String xPathQuery =

"/Orders_OrderDetails/Orders[OrderID = " + orderId + "]";

XmlNode xmlNode =

(new XmlDataDocument(ds)).SelectSingleNode(xPathQuery);

StringBuilder result = new StringBuilder( );

if (xmlNode != null)

{

// Retrieve the query results for the Order

result.Append("OrderID = " +

xmlNode.ChildNodes[0].InnerText + Environment.NewLine); result.Append("CustomerID = " +

xmlNode.ChildNodes[1].InnerText + Environment.NewLine); result.Append("OrderDate = " +

xmlNode.ChildNodes[3].InnerText + Environment.NewLine); result.Append("Line Items:" + Environment.NewLine);

// Retrieve the query results for the Order Details

XmlNodeList xmlNodeList = xmlNode.SelectNodes("OrderDetails"); for (int i = 0; i < xmlNodeList.Count; i++)

{

result.Append("\tProductID = " +

xmlNodeList[i].ChildNodes[1].InnerText +

Environment.NewLine);

result.Append("\tQuantity = " +

xmlNodeList[i].ChildNodes[2].InnerText +

Environment.NewLine);

result.Append("\tUnitPrice = " +

Trang 4

xmlNodeList[i].ChildNodes[3].InnerText +

Environment.NewLine + Environment.NewLine);

}

}

else

{

result.Append("No data found for Order ID = " + orderId);

}

xPathQueryResultTextBox.Text = result.ToString( );

}

Discussion

The W3C XML Path Language (XPath) is a navigation language used to select nodes from an XML Document It is defined by W3 as a standard navigation language The specification can be found at http://www.w3.org/TR/xpath Microsoft SQL Server 2000 implements a subset of the language as described in SQL Server Books Online under the topics "Guidelines for Using XPath Queries" and "Using XPath Queries."

In NET, the DataSet is synchronized with the XmlDataDocument As a result, in some cases XML services can be used to access the XmlDataDocument to perform certain functionality more conveniently than could be accomplished using the DataSet directly

To execute an XPath query against the contents of a DataSet, call the SelectSingleNode( ) method of the XmlDataDocument for the DataSet, passing the XPath query as an

argument as shown in the example:

XmlNode xmlNode = (new XmlDataDocument(ds)).SelectSingleNode(xPathQuery);

The example iterates over the Order Details for the Orders by accessing the XmlNodeList containing that data within the XmlNode retrieved by the XPath query:

XmlNodeList xmlNodeList = xmlNode.SelectNodes("OrderDetails");

This works because the Nested property is set to true for the DataRelation relating the tables containing the Orders and Order Details data If the Nested property were false, you'd have to use a second XPath query to retrieve the Order Details data from the

XMLDataDocument for the DataSet

[ Team LiB ]

Ngày đăng: 26/01/2014, 10:20

TỪ KHÓA LIÊN QUAN