Sunteți pe pagina 1din 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.
• Define some DataColumn
objects.
DataColumn

DataColumn

12
Create Dataset Programmatically (2)

• Add the DataColumn objects to a DataTable object.

DataTable

DataColumn

DataColumn

13
Create Dataset Programmatically (3)
1. 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

TablesCollection DataTable

ColumnsCollection DataColumn

RowsCollection DataRow

ConstraintsCollection Constraint

RelationsCollection 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

S-ar putea să vă placă și