Вы находитесь на странице: 1из 47

Microsoft ADO.

NET:
Programming ADO.NET
Datasets
Vijaya Lakshmi Byri
Support Engineer

Manisha Gupta
Support Engineer
(PSS) Microsoft Corporation
Agenda
 Review of ADO.NET architecture in the
Microsoft® .NET Framework
 Working with datasets
 ADO.NET datasets
 XML and datasets
 Typed datasets

2
Microsoft .NET Framework

XML Web Web Windows


Services Forms Forms
ASP.NET
Data and XML Classes
Base Framework Classes
Common Language Runtime

3
ADO.NET Architecture

4
ADO.NET Datasets

 Architecture of dataset
 Creating a dataset
 Navigating the dataset hierarchy
 Copying a dataset
 Merging a dataset

5
Dataset Architecture

Dataset
DataTableCollection
DataTable
DataRowCollection
DataColumnCollection
ConstraintCollection

DataRelationsCollection

6
Creating a Dataset

 Server Explorer
 Using DataAdapter
 Programmatically
 Using XML

7
Server Explorer

8
Generate a Dataset

9
Using DataAdapter

 Open connection
 Create a DataAdapter
 Fill the dataset

10
Sample Code

Dim cnNwind As New SqlClient.SqlConnection("Data


Source=(localhost);
Integrated Security=SSPI;
Initial Catalog=Northwind;")
Dim daOrders As New
SqlClient.SqlDataAdapter("Select * from Orders",
cnNwind)

Dim ds As New dataset()


daOrders.Fill(ds, "Orders")

11
Create Dataset Programmatically
It is possible to fabricate a dataset without
loading in external data.
1. Define some DataColumn
objects.
DataColumn
DataColumn

12
Create Dataset Programmatically (2)

2. Add the DataColumn objects to a DataTable object.

DataTable

DataColumn
DataColumn

13
Create Dataset Programmatically (3)
3. Add the DataTable object to a Dataset object.

Dataset
DataTable

DataColumn
DataColumn

14
DataTable

Dataset
DataColumn
DataTable

DataRow

DataColumn
DataTable

DataRow

15
Sample Code
Dim myCustomers As New Data.DataTable()
myCustomers.TableName = "Customers"

With myCustomers
.Columns.Add("CustomerID", Type.GetType("System.String"))
.Columns.Add("CompanyName", Type.GetType("System.String"))
.Columns.Add("ContactName", Type.GetType("System.String"))
End With

Dim myDr As Data.DataRow


myDr = myCustomers.NewRow()
myDr("CustomerID") = "9876"
myDr("CompanyName") = “Microsoft"
myDr("ContactName") = “Jeff Smith"

myCustomers.Rows.Add(myDr)
Dim myDS As New Data.dataset("CustomerDS")
myDS.Tables.Add(myCustomers)

16
Navigating Dataset

Dataset
Dataset

TablesCollection DataTable
TablesCollection DataTable

ColumnsCollection DataColumn
ColumnsCollection DataColumn

RowsCollection DataRow
DataRow
RowsCollection

ConstraintsCollection Constraint

RelationsCollection
RelationsCollection DataRelation
DataRelation

17
Adding a DataRelation

Use DataRelation objects to:


• Relate one table to another
• Navigate through the tables
• Return child or parent rows from a related table

custDS.Relations.Add("CustOrders", _
custDS.Tables("Customers").Columns("CustID"),
custDS.Tables("Orders").Columns("CustID"))

18
Navigating a Relationship

Dim custOrderRel As DataRelation =


custDS.Relations.Add("CustOrders", _
custDS.Tables("Customers").Columns("CustomerID"
),
custDS.Tables("Orders").Columns("CustomerID"))
Dim custRow As DataRowDim orderRow As DataRow
For Each custRow in custDS.Tables("Customers").Rows
Console.WriteLine(custRow("CustomerID"))
For Each orderRow in
custRow.GetChildRows(custOrderRel)
Console.WriteLine(orderRow("OrderID"))
Next
Next
19
Copying a Dataset

 Create an exact copy of the dataset.


 Create a copy of modified rows.
 Create a copy of the schema.

20
Creating an Exact Copy of the Dataset

 To create an exact copy of the dataset that


includes both schema and data, use the Copy
method of the dataset.

Dim copyDS As dataset = custDS.Copy()

21
Creating a Copy of Modified Rows
 Use GetChanges to return only modified rows
with a specified row state.
 Added
 Updated
 Deleted

Dim changeDS As dataset = custDS.GetChanges()


Dim addedDS As dataset =
custDS.GetChanges(DataRowState.Added)

22
Creating a Copy of the Schema
 Use the Clone method to copy only the
schema of the dataset.
 Use the ImportRow method of the DataTable
to add the existing rows.

Dim custGermanyDS As dataset = custDS.Clone()Dim


copyRows() As DataRow =
custDS.Tables("Customers").Select("Country =
'Germany'")
Dim custTable As DataTable =
custGermanyDS.Tables("Customers")
Dim copyRow As DataRow
For Each copyRow In copyRows
custTable.ImportRow(copyRow)
Next 23
Merging a Dataset

 Merge the contents of a dataset


 Merge contents of the DataTable
 Merge contents of the DataRow array
 MergeFailed event

24
Merging Factors and Options

 Primary keys
 PreserveChanges
 MissingSchemaAction
 Constraints

25
Sample Code
Dim ds As New Dataset("myDataset")
Dim t As New DataTable("Items")
' Create variable for temporary Dataset.
Dim xSet As Dataset
ds.Tables.Add(t)
‘Add two columns
‘Add Rows
ds.AcceptChanges()
‘Change row values
‘ Add one row.
‘Insert code for error checking.
‘ If the table has changes or errors, create a subset Dataset.
xSet = ds.GetChanges(DataRowState.Modified Or
DataRowState.Added)
‘Insert code to reconcile errors.
xSet.Tables("Items").Columns.Add(New DataColumn("newColumn"))

‘ Add values to the rows for each column.


26
ds.Merge(xSet, False, System.Data.MissingSchemaAction.Add)
XML and Datasets

 Loading a dataset with XML data


 Writing a dataset as XML data
 Loading a dataset with XSD schema
 Writing a dataset as XSD schema
 Synchronizing dataset and
XMLDataDocument

27
Loading a Dataset with XML Data

 The method used to load XML data into a


dataset:
 Public Function ReadXml(Stream) As
XmlReadMode
 Public Function ReadXml(Stream, XmlReadMode)
As XmlReadMode

28
Sample Code

Dim ds As New Dataset()


ds.ReadXml("c:\books.xml",XmlReadMode.Auto)

Dim dr As DataRow
For Each dr In ds.Tables(0).Rows
Console.WriteLine(dr.Item(0))
Next

29
XmlReadMode

 Auto
 DiffGram
 Fragment
 IgnoreSchema
 InferSchema
 ReadSchema

30
Writing a Dataset as XML

 The method used to write XML data using a


dataset:
 Overloads Public Sub WriteXml(Stream)
 Overloads Public Sub
WriteXml(Stream,XmlWriteMode)

31
Sample Code

Dim cnNwind As New SqlConnection(


"Data Source=(localhost);integrated
Security=SSPI;Initial catalog=Northwind;")
Dim daOrders As New SqlDataAdapter(
"Select * from customers", cnNwind)

Dim ds As New Dataset()


daOrders.Fill(ds, "Customers")

ds.WriteXml("C:\Customers.xml",XmlWriteMode.IgnoreS
chema)
32
Loading a Dataset with XSD Schema

 ReadXmlSchema
 Loads the XSD schema
 Does not load any data
 InferXmlSchema
 Infers the XSD schema from the XML data
 Loads the XSD schema
 Loads the XML data

33
Writing XML Schema

 GetXmlSchema
 Returns an XSD schema
 Return type is String
 Dim xsdDS As String = DS.GetXmlSchema()
 WriteXmlSchema
 Writes XSD schema to a file or stream
 DS.WriteXmlSchema("Customers.xsd")

34
Synchronizing XmlDataDocument
and Dataset

 Synchronize XMLDataDocument and a


dataset
 Perform XPath queries on a dataset
 Perform XSLT transformations on a dataset

35
Synchronizing XmlDataDocument
and Dataset (2)
 Create a dataset
 Create an XmlDataDocument using a dataset
Dim cnNwind As New SqlConnection("Data
Source=(localhost);Integrated security=SSPI;Initial
catalog=Northwind;")
Dim daOrders As New SqlDataAdapter("Select * from
Orders where 1=2", cnNwind)

Dim ds As New Dataset()


daOrders.FillSchema(ds, "Orders")
Dim xmldoc As New Xml.XmlDataDocument(ds)
xmldoc.Load("C:\Orders.xml")

36
Performing XPath Queries on a
Dataset
 Create an XmlDataDocument based on a
dataset
 Perform XPath queries on the
XmlDataDocument
Dim nodes As Xml.XmlNodeList
nodes = xmldoc.SelectNodes("//OrderID")
Dim node as Xml.XmlNode
For each node in nodes
Console.WriteLine(node.InnerText)
Next
37
Performing XSL Transformations
on Dataset
 Create an XMLDataDocument based on a
dataset
 Using XslTransform object to transform the
data in the dataset
Dim xmldoc As New Xml.XmlDataDocument(ds)
Dim xsldoc As New Xml.Xsl.XslTransform()
xsldoc.Load("Orders.xsl")
Dim xpathnav As Xml.XPath.XPathNavigator
xpathnav = xmldoc.CreateNavigator

xsldoc.Transform(xpathnav, Nothing) 38
Typed Datasets

 How to generate a typed dataset


 Using MSDatasetGenerator
 Using .NET command-line tools:
 Xsd.exe
 Language compiler

 Using annotations with a typed dataset

39
Using MSDatasetGenerator

40
IntelliSense® for Typed Dataset

41
IntelliSense for Typed Dataset (2)

42
Using .NET Command-Line Tools
 Create a dataset using an XSD schema
 Creates a class file (depending upon the language
specified)
Example Class1.vb
 Syntax:
xsd.exe /d /l:C# XSDSchemaFileName.xsd
/n:XSDSchema.Namespace
 Using language compiler compile the library
from the generator code
 Syntax:
csc.exe /t:library XSDSchemaFileName.cs
/r:System.dll /r:System.Data.dll
43
Class1.vb
 Namespace
 Classes
 x(xsd schema name)
 Inherits dataset class
 xDataTable
 Inherits DataTable Class
 xRow
 Inherits DataRow Class
 xRowChangeEvent
 Inherits EventArgs Class

Note: x would be the XSD schema name.


44
Using Annotations with a Typed
Dataset
 Modify the names of the elements in the
typed dataset without modifying the
underlying schema.
 How to annotate
 Add the Annotations namespace
Namespace = xmlns:codegen="urn:schemas-
microsoft-com:xml-msprop"
 Add the annotation
<xs:element name="Customers"
codegen:typedName="Customer"
typedPlural="Customers">
45
Annotations

 TypedName
 TypedPlural
 TypedParent
 TypedChildren
 NullValue

46
Thank you for joining us for today’s Microsoft Support
WebCast.

For information on all upcoming Support WebCasts and


access to the archived content (streaming media files,
PowerPoint® slides, and transcripts), please visit:

http://support.microsoft.com/webcasts/

We sincerely appreciate your feedback. Please send any


comments or suggestions regarding the Support
WebCasts to supweb@microsoft.com 47

Вам также может понравиться