net data access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班...

43
.NET Data Access 台台台台台台台台台台 台台台台台台台台台台台台台台 台台台 台台台台台 [email protected]

Upload: mercy-hardy

Post on 20-Jan-2016

253 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

.NET Data Access

台南市教育局網路中心在職教師校務行政系統程式開發

進階班行政網路組

[email protected]

Page 2: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

Design Goals for ADO.NET

• Leverage Current ADO Knowledge

• Support the N-Tier Programming Model

• Integrate XML Support

Page 3: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

Why ADO.NET?ADO vs. ADO.NET

• ADO

– Connected access

– Physical data model

– RecordSet based data

– RecordSet is ‘one’ table

• > 1 table requires a database JOIN

• Data is “flattened”: lose relationships

– COM/COM+ data types

– Data via COM marshalling

– Blocked by firewalls (DCOM, binary)

• ADO.NET

– Disconnected access

– Logical data model

– The DataSet based data

– DataSet is multi-table

• > 1 table or source does not require a JOIN

• Relationships remain: navigation is relational

– XML schema Data types – No data type conversions required

– XML is plaintext: ‘Firewall friendly’

Page 4: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

DataSetDataSet

ADO.NET Architecture()

System.DataSystem.Data

System.Data.OleDbSystem.Data.OleDb System.Data.SQLTypesSystem.Data.SQLTypesSystem.Data.SqlClientSystem.Data.SqlClient

.NET Data Providers.NET Data Providers

Page 5: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

ADO.NET Architecture(2)• XML and ADO.NET• ADO.NET Components

Page 6: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

.NET Data Provider

• Retrieve data from a data source and reconcile changes made to it with the data source

• The link between data source and application

• Two Providers out of the box:– .NET SQL Data Provider: SqlClient– .NET OLE DB Data Provider: OleDb

Page 7: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

ADO.NET Data ProviderCore Classes

ConnectionConnection

CommandCommand

Data ReaderData Reader

Data AdapterData Adapter

System.Data.<Provider>System.Data.<Provider>

Connect to data sourceConnect to data source

Execute Command Execute Command against data sourceagainst data source

Reads a forward-only read-Reads a forward-only read-only stream of data from a only stream of data from a

data sourcedata source

Populates a DataSet and Populates a DataSet and resolves updates with data resolves updates with data

sourcesource

Page 8: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

Connection Class• Represent a unique session with a data source• Create, open, close a connection to a data source• Functionality and methods to perform transactions• Connection example:

String conStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +String conStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=NWIND_RW.MDB"; "Data Source=NWIND_RW.MDB";OleDbConnection aConn = new OleDbConnection(conStr);OleDbConnection aConn = new OleDbConnection(conStr);aConn.Open();aConn.Open();

// Execute Queries using OleDbCommand Class

aConn.Close();aConn.Close();

Page 9: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

Connection

• OleDbConnection Provider=MSDAORA; Data Source=ORACLE8i7; User ID=OLEDB; Password=OLEDB

Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\bin\LocalAccess40.mdb;

Provider=SQLOLEDB;Data Source=MySQLServer;Integrated Security=SSPI;

• SqlConnection user id=sa;password=aU98rrx2;initial catalog=northwind;data source=mySQLServer;Connect Timeout=30

Page 10: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

Command Class• Represents a query to execute on the data

source• Methods of interest:

– ExecuteNonQuery: Executes a SQL statement that doesn’t return any rows

– ExecuteReader: Returns a DataReader– ExecuteScalar: Executes the query and returns

the first column of the first row

String SqlStr = “INSERT INTO Customers (CustId,FName,Lname) ;” +String SqlStr = “INSERT INTO Customers (CustId,FName,Lname) ;” +““Values (‘Matt’,’Stephen’)”;Values (‘Matt’,’Stephen’)”;

SqlCommand myCommand = new SqlCommand(SqlStrSqlStr , myConnection);myCommand.Connection.Open(); myCommand.ExecuteNonQuery(); myConnection.Close();

Page 11: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

DataAdapter Class

• Bridge between the DataSet and the data store• Means to modify the DataSet and data source• Properties of Interest: DeleteCommand, InsertCommand,

SelectCommand, UpdateCommand

• TableMappings: Maps source and DataTable• Inherits methods from DbDataAdapter class

– public virtual int Fill(DataSet,”Tablename”); – public virtual int update(DataSet,”Tablename”);

Data Store DataSetDataAdapter

Page 12: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

DataReader

• Forward-only data access• “Lightweight” programming model

– Less overhead than using Command

• Instantiated by the Command class Execute method• Ties up the Command until it is finished reading• Methods to retrieve data:

– By index and optionally column type: GetString, GetInt32, and so on

– Read: Advances reader to next record

Page 13: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

DataReader Sample

// Code for creating the Connection “Conn” not shownString myQuery = “SELECT * FROM Customers”;String myQuery = “SELECT * FROM Customers”;Conn.Open();Conn.Open();OleDbCommand myCmd = new OleDbCommand( myQuery, Conn );OleDbCommand myCmd = new OleDbCommand( myQuery, Conn );// Declare the DataReader...OleDbDataReader myDataReader;OleDbDataReader myDataReader;

// Instantiate the DataReader with ExecuteReader(...) ...myDataReadermyDataReader = = myCmd.ExecuteReader();myCmd.ExecuteReader();

// Always call Read before accessing data. while(myDataReader.Read()) while(myDataReader.Read()) {{

Console.WriteLine(myDataReader.GetString(0));Console.WriteLine(myDataReader.GetString(0));}}// Always Close the reader and the connection when donemyDataReader.Close();myDataReader.Close();Conn.Close();Conn.Close();

Page 14: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

System.Data Principal Classes

DataSetDataSet

DataTableDataTable

DataRowDataRow

DataColumnDataColumn

DataRelationDataRelation

DataViewDataView

Contains the ‘main’ classes of Contains the ‘main’ classes of ADO.NETADO.NET

In-memory cache of databaseIn-memory cache of database

In-memory cache of database tableIn-memory cache of database table

Used to manipulate a row in a Used to manipulate a row in a DataTableDataTable

Used to define the columns in a Used to define the columns in a DataTableDataTable

Used to relate two Used to relate two DataTablesDataTables to each to each otherother

Used to create a view on a Used to create a view on a DataSetDataSet

System.DataSystem.Data

Page 15: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

DataSet Tables

DataTable

System.Data: DataSet Overview

Relations

DataRelation

DataRelation

DataRow(s)

DataColumn

Constraint(s)

DataTable

DataTable

DataView

DataView

Page 16: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

System.Data: DataSet

• An in-memory cache of data from a data source via DataAdapter

• XML used to read and write data and schema

• Common way to represent and manipulate data– Universal data container

– Not just for use with databases

• Logical or physical representation of data, depending on: – The query/result set

– Whether DataTables and Relations exist

• Designed to be disconnected from the data source– Connect, execute query, disconnect

Page 17: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

System.Data: DataTable• May be mapped to a physical table in the data

source• Can be related to one another through

DataRelations• Optimistic concurrency / locking• Properties of Interest:

– Columns: Returns DataColumnCollection of DataColumns

– Rows: Returns DataRow objects as a DataRowCollection

– Constraints: Returns the table’s ConstraintCollection

Page 18: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

System.Data: DataSet & DataTable

• Create a DataTable and add it to a DataSet

DataSet ds = new DataSet();DataSet ds = new DataSet();

// Create DataTable object: “Customers”.DataTable dt = new DataTable( “Customers” );DataTable dt = new DataTable( “Customers” );

// Create and add columns to the table// 1. Explicitly create and Add a DataColumnDataColumn dc = new DataColumn( “CustID”, typeof(Int16) );DataColumn dc = new DataColumn( “CustID”, typeof(Int16) );dt.Columns.Add( dc );dt.Columns.Add( dc );

// 2. Implicitly Create and Add columns (DataColumn).dt.Columns.Add( “First_Name”, typeof(String) );dt.Columns.Add( “First_Name”, typeof(String) );dt.Columns.Add( “Last_Name”, typeof(String) );dt.Columns.Add( “Last_Name”, typeof(String) );

// Add the DataTable object to the DataSetds.Tables.Add( dt );ds.Tables.Add( dt );

Page 19: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

如何存取資料庫• ADO .NET 資料存取模型

– 資料庫連線 (Connection)• SqlConnection 與 OleDbConnection

– 執行 SQL 語法 (Commands)• SqlCommand 與 OleDbCommand

– ExecuteNonQuery ( 不傳回資料列 )

– ExecuteScalar ( 傳回單一列資料 )

– ExecuteReader ( 傳回多列資料 )

– 取得資料• DataReader

• DataAdapter 與 DataSet

Page 20: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

• 使用資料庫連線的步驟– OleDbConnection conn = new OleDbConnection() ;

– conn.ConnectionString =

"Provider=Microsoft.Jet.OLEDB.4.0;

User ID=Admin; Password=123;

Data Source=C:\Northwind.mdb" ;

– conn.Open() ;

– conn.Close() ;

如何使用資料庫連線

– 建立資料庫連線物件– 設定連線字串

– 開啟資料庫連線– :

– 關閉資料庫連線

Page 21: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

• SqlConnection– conn.ConnectionString =

"User ID=sa; Password=;

Server=localhost;Database=Northwind"

;

• OleDbConnection– conn.ConnectionString =

"Provider=SQLOLEDB;

User ID=sa; Password=;

Data Source=localhost;

Initial Catalog=Northwind" ;

Connection

– 只能夠連接 Microsoft SQL Server

– 效能最佳化– 需引用 System.Data.SqlClient

– 可以透過 OLE DB 連接不同的資料庫– 應用範圍最廣– 需引用 System.Data.OleDb

– 一樣可以連接 Microsoft SQL Server

Page 22: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

Command • SqlCommand 與 OleDbCommand

• 支援多種 SQL 命令– DCL : GRANT, REVOKE, DENY

– DDL : CREATE, ALTER, DROP

– DML : SELECT, INSERT, DELETE, UPDATE

– 其它 : Stored Procedure, CURSOR, …

• 允許加入參數 (Parameters)

Page 23: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

• 執行非查詢式 SQL 語法– SqlCommand cmd = new

SqlCommand("update… where OrderID=@ID",

conn) ;

– SqlParameter param = new

SqlParameter("@ID", typeof(int)) ;

– param.Value = 12 ;

– cmd.Parameters.Add(param) ;

– int rowEffects = cmd.ExecuteNonQuery() ;

執行 SQL 語法– 建立一個 Command 物件

– 建立參數物件

– 設定參數值– 將參數加入 Command 物件– 執行 SQL 語法

Page 24: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

• 執行查詢式 ( 單筆記錄 ) SQL 語法– string sql = "select cid from… where OrderID=@ID" ;

– SqlCommand cmd = new SqlCommand(sql, conn) ;

– SqlParameter param = new

SqlParameter("@ID", typeof(int)) ;

– param.Value = 12 ;

– cmd.Parameters.Add(param) ;

– int myCID = (int) cmd.ExecuteScalar() ;

如何執行 SQL 語法

– 建立一個 Command 物件

– 建立參數物件

– 設定參數值– 將參數加入 Command 物件– 執行 Command 並取得結果

Page 25: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

• 執行查詢式 ( 多筆記錄 ) SQL 語法– string sql = "select PName, Qty from MyOrders" ;

– SqlCommand cmd = new SqlCommand(sql, conn) ;

– SqlDataReader dr = cmd.ExecuteReader() ;

– while ( dr.Read() )

{

string pname = dr.GetString(0) ;

int qty = dr.GetInt32(1) ;

Console.WriteLine("{0}, {1}", pname, qty) ;

}

如何處理多筆記錄

– 建立一個 Command 物件

– 執行 Command 並取得 DataReader

– 讀取下一筆記錄 ( 如果 true 表示有資料 )

{

取得第一個欄位取得第二個欄位

}

Page 26: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

• 執行 Stored Procedure– SqlCommand cmd = new SqlCommand() ;

– cmd.Connection = conn ;

– cmd.ComandText = "DeleteOrder" ;

– cmd.CommandType =

CommandType.StoredProcedure ;

– cmd.Parameters.Add("@ID", orderID) ;

– int rowEffects = cmd.ExecuteNonQuery() ;

如何執行 Stored Procedure

– 建立一個 Command 物件– 設定使用連線– 設定命令名稱– 設定 CommandType

– 建立參數– 執行 Stored Procedure

Page 27: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

Data Access Layer Calling stored procedures

Dim sqlconn As SqlConnection = New SqlConnection(connectionstring)aDim sqlcomm As SqlCommand = New SqlCommand()sqlcomm.CommandType = CommandType.StoredProceduresqlcomm.CommandText = "DemoProc“

‘Open Connectionsqlconn.Open()sqlcomm.Connection = sqlconn

'Create parameterssqlcomm.Parameters.Add(New SqlParameter("@input1", SqlDbType.Int))sqlcomm.Parameters.Add(New SqlParameter("@input2", SqlDbType.Int))sqlcomm.Parameters.Add(New SqlParameter("@output1",

SqlDbType.Int)).Direction = ParameterDirection.Output

‘Set Parameter Valuessqlcomm.Parameters.Item("@input1").Value = 123sqlcomm.Parameters.Item("@input2").Value = 456sqlcomm.ExecuteNonQuery()

‘Access OutputResponse.write (sqlComm.Parameters.Item(“@output1”).Value.ToString())

Page 28: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

WebForms 控制項資料繫結<%@ Import Namespace="System.Data.SqlClient" %><html><head><script language="C#" runat=server>

public void Page_Load(Object sender, EventArgs args) {

// 建立資料庫連線,並取得 DataReaderSqlConnection cnn = new SqlConnection("server=localhost;uid=sa;");conn.Open();SqlCommand cmd = new SqlCommand("select * from customers", conn);SqlDataReader dr = cmd.ExecuteReader();

// 將資料來源繫結到控制項dgCustomers.DataSource = dr;dgCustomers.DataBind(); }

</script></head><body><asp:DataGrid id="dgCustomers" runat="server"/>

</body></html>

Page 29: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

自訂 Data Provider• ADO .NET 共有那些 Data Provider

– SQL Data Provider– OLE DB Data Provider– ODBC Data Provider ( 外掛 )– Oracle Data Provider ( 未來 )

Page 30: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

SelectCommandSelectCommandSelectCommandSelectCommand

InsertCommandInsertCommandInsertCommandInsertCommand

UpdateCommandUpdateCommandUpdateCommandUpdateCommand

DeleteCommandDeleteCommandDeleteCommandDeleteCommand

DataAdapter 與 DataSet• DataSet 與資料庫之間透過 DataAdapter 進行存

取動作

DataAdapterDataAdapterDataAdapterDataAdapter

DataSetDataSetDataSetDataSet資資料料庫庫

資資料料庫庫 Update Update Update Update

Fill Fill Fill Fill

Page 31: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

• 透過 DataAdapter 取得 DataSet 資料– SqlCommand cmd = new SqlCommand() ;

cmd.Connection = conn ;

cmd.ComandText = "select * from Customers" ;

– SqlDataAdapter da = new SqlDataAdapter() ;

– da.SelectCommand = cmd;

– DataSet ds = new DataSet("Customers") ;

– da.Fill(ds) ;

如何取得 DataSet

– 建立一個 Command

用來執行 SELECT 語法

– 建立 DataAdapter 物件– 設定 SelectCommand

– 建立一個 DataSet 物件– 使用 DataAdapter 物件的 Fill 方法

填滿 DataSet

– SqlDataAdapter da = new SqlDataAdapter(

"select * from Customers",

conn) ;

Page 32: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

DataSet 的結構• DataSet 可以包含多個表格 (Table) ,組成 Tables 集合

DataSetDataSetDataSetDataSet

TablesTablesTablesTables

Tables[0]Tables[0]Tables[1]Tables[1]Tables[2]Tables[2]Tables[3]Tables[3]

::::::::::

Tables[0]Tables[0]Tables[1]Tables[1]Tables[2]Tables[2]Tables[3]Tables[3]

::::::::::

DataTableDataTableDataTableDataTable

RowsRowsRowsRows

Rows[0]Rows[0]Rows[1]Rows[1]Rows[2]Rows[2]

::::::::

Rows[0]Rows[0]Rows[1]Rows[1]Rows[2]Rows[2]

::::::::

DataRowDataRowDataRowDataRow

• 使用 Tables[ 表格號碼 ] 或 Tables[" 表格名稱 "] 來引用 Tables 中的任何一個表格。

(Tables.Count 可以取得表格數目 )

• 每一個 DataSet 中的表格都是一個 DataTable 物件• DataTable 可以包含多筆資料列 (Row) ,組成 Rows 集合• 使用 Rows[ 列號碼 ] 來引用 Tables 中的任何一個表格。(Rows.Count 可以取得資料總筆數 )

• Rows 集合中的每一筆資料記錄都是一個 DataRow 物件

AB(04)2222-2222男王小明血型電話性別姓名

3210

DataRowDataRow rowrow = = dsds..TablesTables[0].[0].RowsRows[[33];];stringstring name = name = rowrow[[00];];stringstring phone = phone = rowrow[["" 電話電話 ""];];

• 透過欄位號碼或欄位名稱來存取 DataRow 的資料• 每一個 DataRow ( 每一筆記錄 ) 中包含了多個欄位

Page 33: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

• 使用 foreach 迴圈瀏覽 DataSet 資料foreach(DataRow cust in ds.Tables[0].Rows)

{

Console.WriteLine("\n 客戶 : {0}", cust["Name"]);

foreach(DataRow ord in cust.GetChildRows("odr"))

{

Console.Write(" 訂單編號 : {0}", ord["id"]);

Console.Write("\t 數量 :{1}\n", ord["qty"]);

}

}

• 使用 for 迴圈瀏覽 DataSet 資料for(int c=0;c < ds.Tables[0].Columns.Count; c++) { DataColumn

dc = ds.Tables[0].Columns[c] ;

Console.Write("{0}\t", dc.ColumnName) ;

}

for(int r = 0;r < ds.Tables[0].Rows.Count;r++) {

string cName = ds.Tables[0].Rows[r][" 客戶名稱 "] ;

string cAddress = ds.Tables[0].Rows[r][" 地址 "] ;

Console.WriteLine("\n{0}\t{1}", cName, cAddress) ;

}

如何瀏覽 DataSet 中的資料

Page 34: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

Data, XML, And .NETXML Recap

• XML declaration

• Document element

• Elements

• Attributes

• Text content

• Namespaces

<?xml version="1.0"?><?xml version="1.0"?><employees xmlns="urn:…"><employees xmlns="urn:…">

<employee id="123"><employee id="123"> <name>Philips</name><name>Philips</name> <salary>145000</salary><salary>145000</salary> </employee></employee> … …</employees></employees>

<?xml version="1.0"?><?xml version="1.0"?><employees xmlns="urn:…"><employees xmlns="urn:…">

<employee id="123"><employee id="123"> <name>Philips</name><name>Philips</name> <salary>145000</salary><salary>145000</salary> </employee></employee> … …</employees></employees>

Page 35: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

.NET XML Classes Namespaces and Classes

XmlReaderXmlReaderXmlReaderXmlReader

System.Xml namespaceSystem.Xml namespace

XmlWriterXmlWriterXmlWriterXmlWriter

XmlNavigatorXmlNavigatorXmlNavigatorXmlNavigator

XmlDocumentXmlDocumentXmlDocumentXmlDocument

XmlElementXmlElementXmlElementXmlElement

XmlAttributeXmlAttributeXmlAttributeXmlAttribute

etc.etc.

System.Xml.XPathSystem.Xml.XPath• Plus…

System.Xml.XslSystem.Xml.Xsl

XPath engineXPath engine

XSLT transformsXSLT transforms

Page 36: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

.NET XML Classes Reading XML Data

• Use XmlReader class– Fast, forwards-only, read-only cursor– “Pull” model (not the “push” model of SAX)

• XmlReader is an abstract class– Several concrete

subclasses

XmlReaderXmlReader{ Abstract class }{ Abstract class }

XmlReaderXmlReader{ Abstract class }{ Abstract class }

XmlTextReaderXmlTextReaderRead a text-based Read a text-based

streamstream

XmlTextReaderXmlTextReaderRead a text-based Read a text-based

streamstream

XmlNodeReaderXmlNodeReaderRead an in-memory Read an in-memory

DOM treeDOM tree

XmlNodeReaderXmlNodeReaderRead an in-memory Read an in-memory

DOM treeDOM tree

Page 37: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

.NET XML Classes Using XmlReader

• Example

• Capabilities– Pull nodes you want, skip those you don't– Get detailed node information– Get typed data

XmlReader reader;XmlReader reader;reader = new XmlTextReader("MyFile.xml");reader = new XmlTextReader("MyFile.xml");while(reader.Read())while(reader.Read()){ { …process nodes… } }

Page 38: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

.NET XML Classes Writing XML Data

• Use XmlWriter

• Alternatively…– Create content using XmlDocument– Serialise data using XmlWriter

XmlWriterXmlWriterXmlWriterXmlWriter

XmlTextWriterXmlTextWriterXmlTextWriterXmlTextWriter XmlNodeWriterXmlNodeWriterXmlNodeWriterXmlNodeWriter

XmlWriter writer = new XmlTextWriter(…);XmlWriter writer = new XmlTextWriter(…);

writer.WriteStartDocument();writer.WriteStartDocument();

writer.WriteStartElement("name", "Mike");writer.WriteStartElement("name", "Mike");

Page 39: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

.NET XML Classes Using XPath

• XPath maps an XML document to a tree of nodes

• Use XPath expressions to identify, select, and manipulate nodes in an XML hierarchy– Use location paths

to select nodes– XPath operators and functions

Page 40: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

.NET XML Classes XML .NET Support for XPath

• XmlNavigator class provides XPath support

• Evaluate XPath expressions

• Select nodes using XPath

XmlNavigator nav;XmlNavigator nav;

nav = new DocumentNavigator(document);nav = new DocumentNavigator(document);

nav.Evaluate("count(//employee)");nav.Evaluate("count(//employee)");

nav.Select("//employee[salary > 75000]");nav.Select("//employee[salary > 75000]");

Page 41: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

.NET XML Classes Using XSLT

XML XML documentdocument

XSLT XSLT style sheetstyle sheet

++XSLT XSLT

processorprocessor

HTML document HTML document (XML-conformant)(XML-conformant)

XML XML documentdocument

XSLT XSLT style sheetstyle sheet

++XSLT XSLT

processorprocessor

XML document XML document (different grammar)(different grammar)

Page 42: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

.NET XML Classes XML .NET Support for XSLT

• XslTransform class represents an XSLT style sheet

// Load style sheet

XslTransform xsl = new XslTransform();XslTransform xsl = new XslTransform();

xsl.Load("MyStylesheet.xsl");xsl.Load("MyStylesheet.xsl");

// Perform transformation

xsl.Transform(aNavigator, xsl.Transform(aNavigator, null, null, anXmlWriter); anXmlWriter);

Page 43: NET Data Access 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 asp@mail.tn.edu.tw

SyncSync

XML and ADO.NET Unified Architecture

DataReaderDataReader

SqlData-SqlData-ReaderReader

OleDbData-OleDbData-ReaderReader

Controls,Controls,Designers,Designers,

Code-gen, etc.Code-gen, etc.

DataSetDataSet

XmlReaderXmlReader

XmlText-XmlText-ReaderReader

XmlNode-XmlNode-ReaderReader

XSL/T, X-Path,XSL/T, X-Path,Validation, etc.Validation, etc.

XmlData-XmlData-DocumentDocument

DataAdapterDataAdapter

SqlData-SqlData-AdapterAdapter

OleDbData-OleDbData-AdapterAdapter