net data access
DESCRIPTION
.NET Data Access. 台南市教育局網路中心 在職教師校務行政系統程式開發 進階班 行政網路組 [email protected]. Design Goals for ADO.NET. Leverage Current ADO Knowledge Support the N-Tier Programming Model Integrate XML Support. Why ADO.NET? ADO vs. ADO.NET. ADO.NET Disconnected access Logical data model - PowerPoint PPT PresentationTRANSCRIPT
![Page 2: NET Data Access](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/2.jpg)
Design Goals for ADO.NET
• Leverage Current ADO Knowledge • Support the N-Tier Programming Model • Integrate XML Support
![Page 3: NET Data Access](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/5.jpg)
ADO.NET Architecture(2)• XML and ADO.NET• ADO.NET Components
![Page 6: NET Data Access](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/6.jpg)
.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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/15.jpg)
DataSet Tables
DataTable
System.Data: DataSet Overview
Relations
DataRelation
DataRelation
DataRow(s)
DataColumn
Constraint(s)
DataTable
DataTable
DataView
DataView
![Page 16: NET Data Access](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/19.jpg)
如何存取資料庫• ADO .NET 資料存取模型
– 資料庫連線 (Connection)• SqlConnection 與 OleDbConnection
– 執行 SQL 語法 (Commands)• SqlCommand 與 OleDbCommand
– ExecuteNonQuery ( 不傳回資料列 )– ExecuteScalar ( 傳回單一列資料 )– ExecuteReader ( 傳回多列資料 )
– 取得資料• DataReader• DataAdapter 與 DataSet
![Page 20: NET Data Access](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/20.jpg)
• 使用資料庫連線的步驟– 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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/21.jpg)
• 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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/23.jpg)
• 執行非查詢式 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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/24.jpg)
• 執行查詢式 ( 單筆記錄 ) 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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/25.jpg)
• 執行查詢式 ( 多筆記錄 ) 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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/26.jpg)
• 執行 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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/28.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/29.jpg)
自訂 Data Provider• ADO .NET 共有那些 Data Provider
– SQL Data Provider– OLE DB Data Provider– ODBC Data Provider ( 外掛 )– Oracle Data Provider ( 未來 )
![Page 30: NET Data Access](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/30.jpg)
SelectCommandSelectCommand
InsertCommandInsertCommand
UpdateCommandUpdateCommand
DeleteCommandDeleteCommand
DataAdapter 與 DataSet• DataSet 與資料庫之間透過 DataAdapter 進行存取動作
DataAdapterDataAdapter
DataSetDataSet資資料料庫庫 Update Update
Fill Fill
![Page 31: NET Data Access](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/31.jpg)
• 透過 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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/32.jpg)
DataSet 的結構• DataSet 可以包含多個表格 (Table) ,組成 Tables 集合
DataSetDataSet
TablesTables
Tables[0]Tables[0]Tables[1]Tables[1]Tables[2]Tables[2]Tables[3]Tables[3]
::::::::::
DataTableDataTable
RowsRows
Rows[0]Rows[0]Rows[1]Rows[1]Rows[2]Rows[2]
::::::::
DataRowDataRow
• 使用 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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/33.jpg)
• 使用 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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/34.jpg)
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>
![Page 35: NET Data Access](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/35.jpg)
.NET XML Classes Namespaces and Classes
XmlReaderXmlReader
System.Xml namespaceSystem.Xml namespace
XmlWriterXmlWriter
XmlNavigatorXmlNavigator
XmlDocumentXmlDocument
XmlElementXmlElement
XmlAttributeXmlAttribute
etc.etc.
System.Xml.XPathSystem.Xml.XPath• Plus…
System.Xml.XslSystem.Xml.Xsl
XPath engineXPath engine
XSLT transformsXSLT transforms
![Page 36: NET Data Access](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/36.jpg)
.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 }
XmlTextReaderXmlTextReaderRead a text-based Read a text-based
streamstream
XmlNodeReaderXmlNodeReaderRead an in-memory Read an in-memory
DOM treeDOM tree
![Page 37: NET Data Access](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/37.jpg)
.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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/38.jpg)
.NET XML Classes Writing XML Data
• Use XmlWriter
• Alternatively…– Create content using XmlDocument– Serialise data using XmlWriter
XmlWriterXmlWriter
XmlTextWriterXmlTextWriter XmlNodeWriterXmlNodeWriter
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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/39.jpg)
.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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/40.jpg)
.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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/41.jpg)
.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](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/42.jpg)
.NET XML Classes XML .NET Support for XSLT
• XslTransform class represents an XSLT style sheet
// Load style sheetXslTransform xsl = new XslTransform();XslTransform xsl = new XslTransform();xsl.Load("MyStylesheet.xsl");xsl.Load("MyStylesheet.xsl");
// Perform transformationxsl.Transform(aNavigator, xsl.Transform(aNavigator, null, null, anXmlWriter); anXmlWriter);
![Page 43: NET Data Access](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b61550346895dc949c5/html5/thumbnails/43.jpg)
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