Vous êtes sur la page 1sur 50


 Introduce Microsoft® ADO.NET
 Show the evolution of ADO to ADO.NET
 Introduce the primary components of ADO.NET
 Differences Between ADO and ADO.NET
 Benefits of ADO.NET
 ADO.NET Core Concepts and Architecture
 The ADO.NET Object Model
 The DataSet and Data Views
 Managed Providers
ADO.NET and the .NET
Microsoft .NET Framework

Web Services User Interface

Data and XML

ADO.NET XML ... ...

Base Classes

Common Language Runtime

ADO vs. ADO.NET 1/2

 Designed for connected access
 Tied to the physical data model
 The RecordSet is the central data container
 RecordSet is one (1) table that contains all the data
 Retrieving data from > 1 table or source requires a database JOIN
 Data is “flattened”: lose relationships; navigation is sequential
 Data types are bound to COM/COM+ data types
 Data sharing via COM marshalling
 Problems marshalling through firewalls (DCOM, binary)
ADO vs. ADO.NET 2/2

 Designed for disconnected access
 Can model data logically!
 The DataSet replaces the RecordSet
 DataSet can contain multiple tables
 Retrieving data from > 1 table or source does not require a JOIN
 Relationships are preserved: navigation is relational
 Data types are only bound to XML schema
 No data type conversions required
 XML, like HTML, is plaintext: “Firewall friendly”
Benefits of ADO.NET
 Interoperability through use of XML (more later!)
 Open standard for data that describes itself
 Human readable and decipherable text
 Used internally but accessible externally
 Can use XML to read and write and move data

 Scalability through the disconnected DataSet

 Connections are not maintained for long periods
 Database locking does not occur
 Locking support with ServiceComponents
 Optimistic locking otherwise
 Works the way the Web works: “Hit and Run!”
 Maintainability
 Separation of data logic and user interface
Visual Studio.NET
 Typed programming—a programming style
 Uses end-user words: Easier to read and write
 Statement completion in Microsoft Visual Studio.NET
 Safer: Provides compile-time checking
 Examples:
 Untyped: Table("Customer")("Jones").Column(“Balance”)
 Typed: myDataSet.Customer("Jones").Balance

 Wizard support
 Generates queries for you
 Graphical way to select data you want to work with
 XML Designer (for creating DataSets)
Core Concepts and
 The ADO.NET Object Model
 Objects of System.Data
 .NET data providers
 ADO.NET namespace hierarchy
 Organizes the object model
 Includes:
 System.Data
 System.Data.OleDb
 System.Data.Common
 System.Data.SqlClient
 System.Data.SqlTypes



.SqlTypes .SqlClient .Common .OleDb

System.Data Namespace

 Contains the basis and bulk of ADO.NET

 Data-centric namespace
 Provides the means to work on and with your data!
 Classes and methods to manipulate your data
 Ability to create views of your data
 Means to logically represent your data
 Enables the use of XML to view, share, and store data
Introducing the Objects…

System.Data  Contains the “main” classes of ADO.NET

DataSet  In-memory cache of data
DataTable  In-memory cache of a database table
DataRow  Used to manipulate a row in a DataTable
DataColumn  Used to define the columns in a DataTable
DataRelation  Used to relate 2 DataTables to each other
DataViewManager  Used to create views on DataSets
Putting the Objects
DataSet Tables
DataTable DataView

Relations DataColumn

DataRelation Constraint(s) DataViewManager


Working Data - The
 An in-memory cache of data from a data source
 Common way to represent and manipulate data
 Universal data container
 Not just for use with databases
 Logical or physical representation of data
 Designed to be disconnected from the data source
 Connect, execute query, disconnect
 Can use XML
 To read and write data
 To read and write XMLSchema
Properties & Methods of
 Collections are used to add & remove tables & relations
 Properties of Interest:
 Tables: Returns the collection of DataTable objects
 Relations: Returns the collection of DataRelations
 Namespace: Gets or sets the namespace of the DataSet
 Using Properties Samples:
 myDataSet.Tables.Add( myTable );
 myDataTableCollection = myDataSet.Tables
All About Data!

Universal Data Container

DataSet: It’s not just for Databases

The DataTable
 May be mapped to a physical table in the data source
 Can be related to one another through DataRelations
 Optimistic concurrency or locking - model
 Properties of Interest:
 Columns: Returns ColumnsCollection of DataColumns
 Rows: Returns DataRow objects as a RowsCollection
 ParentRelations: Returns the RelationsCollection
 Constraints: Returns the table’s ConstraintsCollection
 DataSet: Returns the DataSet of the DataTable
 PrimaryKey: Gets the DataColumns that make up the
table’s primary key
and DataTable
 Create a DataTable and add it to a DataSet

DataSet ds = new DataSet();

// Create DataTable object: “Customers”.

DataTable dt= new DataTable( “Customers” );

// Create and add columns to the table

// 1. Explicitly create and Add a DataColumn
DataColumn dc;
dc = new DataColumn( “CustID”, Type.GetType("System.Int16"));
dt.Columns.Add( dc );

// 2. Implicitly Create and Add columns (DataColumn).

dt.Columns.Add( “First_Name”,Type.GetType("System String”));
dt.Columns.Add( “Last_Name”, Type.GetType("System String”));

// Add the DataTable object to the DataSet

ds.Tables.Add( dt );
Relating Data - The
 Used to create logical relations between your data
 Create relations between two (2) DataTable objects
 Requires a DataColumn object from each DataTable
 The DataType of both DataColumns must be the same
 Cannot relate a Int32 DataColumn and a String DataColumn
 The relation is named (by you!)
 DataRelation dr=new DataRelation( “myRelation”,...)

 Makes relational navigation possible

 RelationsCollection used to hold/group them
 Accessed through the DataSet’s Relations property
Creating Relations With
// Building on the DataTable example earlier...
// Get the DataTable DataColumns we want to relate...
DataColumn parentCol, childCol;
parentCol= DataSet.Tables["Customers"].Columns["CustID"];
childCol = DataSet.Tables["Orders“].Columns["CustID"];

// Create DataRelation with the name “CustomerOrders”...

DataRelation dr = new DataRelation("CustomersOrders",

// Add the relation to the DataSet...

ds.Relations.Add( dr );
XML and the DataSet
 DataSet can read/write XML for its data and/or schema
 You can create or modify data in a DataSet using XML
 You can create or modify the DataSets schema using XML
 XML-related DataSet methods for reading:
 ReadXml: Reads an XML schema and data into the DataSet
 ReadXmlSchema: Reads an XML schema into the DataSet
 And for writing:
 WriteXml, WriteXmlSchema
 GetXml, GetXmlSchema
 Namespace property: sets the namespace for serialization
 Full support for SQL Server-style DiffGrams
Methods of Reading and
Writing XML
// Code for creating the DataSet mds and loading the
// DataSet from a data source not shown.

String oFile = “C:\\My_ADO.NET\\myXmlOutput.xsd”;

String iFile = “C:\\My_ADO.NET\\myXmlInput.xsd”;

// Write the DataSet’s XMLSchema to an XML Document

mds.WriteXmlSchema( oFile );

// Read/Upload XML Data into the DataSet

mds.ReadXml( iFile);

// modify the data

// ...

// Write the existing Data to an XML Document

mds.WriteXml( "C:\\My_ADO.NET\\myXmlData.txt",
DataSet, DataRelation,
DataSet Tables DataView

Relations DataColumn DataViewSettings

DataRelation Constraint(s) DataViewSetting

DataRelation DataViewSetting

Viewing Data - The
 Create multiple views on DataTable objects
 Bindable to user interface controls
 Properties of Interest:
 Table: Retrieves or sets the associated DataTable
 Sort: Gets or sets the table’s sort columns and sort order
 RowFilter: Gets or sets the expression used to filter rows
 RowStateFilter: Gets or sets the row state filter
 None, Unchanged, New, Deleted, ModifiedCurrent, and others
Creating a DataView by
// Code for myTable “Customers” with “Name” column not shown
DataView view1 = new DataView( myTable );
DataView view2 = new DataView( myTable );

// Creates Ascending view of Customers by “Name”

view1.Sort = “Name ASC”;

// Set the view to show only modified (original) rows

view2.RowStateFilter= DataViewRowState.ModifiedOriginal;

// Bind to UI element(s)...
DataGrid myGrid = new DataGrid();
myGrid.SetDataBinding( view1, “Customer”);

Viewing More Data -
 Similar to a DataView but DataSet oriented
 Used to create multiple views on a DataSet
 Ability to automatically set filters on the tables
 Properties of Interest:
 DataViewSettings: Gets the DataView for on each DataTable
 DataSet: Gets or sets the DataSet to be viewed
 CreateDataView method
 Creates a DataView on a DataTable
DataViewManager By
// Create the DataViewManager & views...
DataViewManager dvMgr = new DataViewManager( myDS );
dvMgr.CreateDataView( ds.Tables[“Orders"] );
dvMgr.DataViewSettings[“Orders"].Sort = “CustID ASC";

dvMgr.CreateDataView( ds.Tables[“Customers"] );
dvMgr.DataViewSettings[“Customers"].Sort = “Name DESC";

// Bind to a UI elements/controls...
dataGrid1.DataSource = viewMgr;
dataGrid1.DataMember = "Table1";

dataGrid2.DataSource = viewMgr;
dataGrid2.DataMember = "Table2";

// Update the control with the data...

The (ADO).NET Data
A collection of classes for accessing data sources:
 Microsoft SQL Server™ 2000, SQL Server 7, and MSDE
 Any OLE Database (OLE DB) providers
 Including: Oracle, JET, and SQL OLE DB Providers
 Establish connection between DataSets and data stores
 Two .NET data providers:
 ADO: via the System.Data.OleDb namespace
 SQL Server: via the System.Data.SqlClient namespace
 System.Data.OleDb is the .NET data provider
.NET Data Providers
Contains classes
shared by both
.SqlClient .OleDb
SqlCommand OleDbCommand
SqlConnection OleDbConnection
SqlDataReader OleDbDataReader
SqlDataAdapter OleDbDataAdapter
OleDbConnection and
 Represent a unique session with a data source
 Create, open, close a connection to a data source
 Functionality and methods to perform transactions
 OleDbConnection example:
String conStr="Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=NWIND_RW.MDB";
OleDbConnection aConn = new OleDbConnection(conStr);
// Execute Queries using OleDbDataAdapter Class
OleDbDataAdapter Class

 Bridge between the DataSet and the data store

 Inherited from the DataAdapter class
 Means to modify the DataSet and data source

data store DataAdapter DataSet

OleDbDataAdapter Class

 Properties of Interest:
 DeleteCommand: The delete command expressed in SQL
 InsertCommand: Gets or sets insert command
 SelectCommand: Gets or sets select command
 UpdateCommand: Gets or sets update command
 TableMappings: Maps source table and a DataTable
 OleDbCommands retrieved or set by command properties
 Implements abstract methods of the DataAdapter class:
 public abstract int Fill( DataSet dataSet );
 public abstract int Update( DataSet dataSet );
OleDbCommand Class

 Represents a query to execute on the data source

 May be a SQL statement or stored procedure
 Properties of Interest:
 Connection: Get or set the data source connection
 CommandText: Get or set the query (text) command
 A SQL statement or the name of the stored procedure
 CommandType: Get/set how the command is interpreted
 Text, StoredProcedure, or TableDirect
 CommandTimeout: The seconds until connection timeout
OleDbDataReader 1/2

 Forward-only data access

 “Lightweight” programming model
 Less overhead than using OleDbDataAdapter
 Instantiated & returned by OleDbCommand.ExecuteReader
 Ties up the OleDbCommand until it is finished reading
OleDbDataReader 2/2

 Properties of Interest:
 FieldCount: Returns the number of fields in the result set
 RecordsAffected: Number of affected records
 Methods to retrieve data:
 By column type and/or index: GetValue; GetString; etc.
 Read(): Advances reader to next record
 NextResult(): Advanced to next result set in batch
 GetValues(): Gets the current row
OleDbDataReader Sample
// Code for creating the OleDbConnection “adoConn” not shown
String myQuery = “SELECT * FROM Customers”;
OleDbCommand myCmd = new OleDbCommand( myQuery,adoConn );

// Declare the OleDbDataReader &

// then instantiate it with ExecuteReader(...) ...
OleDbDataReader reader = myCmd.ExecuteReader();

// Always call Read before accessing data.

while( reader.Read() )
Object [] cols = new Object[10] ;
reader.GetValues( cols );
Console.WriteLine( cols[0].ToString() + " | " + cols[1] );
// Always Close the reader and the connection when done
 ADO.NET is the evolution of ADO
 It is a disconnected, Web-centric model
 Flexible in its ability to work with data
 Increases your ability to logically organize data
 Extensive support for XML
 Facilitates working with and sharing data
 Interacts with a wide variety of data sources
Questions ?
Duwamish Books
A Sample Application for Microsoft .NET
Installing the Sample 1/2

 Install the "Enterprise Samples" with Visual Studio.NET

 Location of the C# Version
 Visual Studio.NET folder
 Directory .\EnterpriseSamples\DuwamishOnline CS
 Location of the Visual Basic® Version
 Directory .\EnterpriseSamples\DuwamishOnline VB
 Installation Tasks
 Check the prerequsites
 Microsoft Windows® 2000 Server, SQL Server 2000 with English
Query optional and supported
 Read the Readme.htm
 Run Installer Duwamish.msi (double-click it)
Installing the Sample 2/2

 The installation wizard will guide you

 Defaults should be OK for almost everybody
 Setup will install database, Web site, and code
 After installation is complete:
 File/Open Solution with the Duwamish.sln file
 Can build the sample with Build/Build Solution
Duwamish Architecture
User / Browser






T Database
Common Components
 Duwamish7.Common
 Contains systems configuration options
 Contains common data definitions (classes)
 Namespace Duwamish.Common.Data
 "Internal" data representation for Book, Category,
Customer, OrderData
 Duwamish7.SystemFramework
 Diagnostics utilities
 Pre and post condition checking classes
 Dynamic configuration
 In short:
 Everything that's pure tech and not business code
 Contains all database-related code
 Uses ADO.NET architecture
 Using SQL Server managed provider
 Shows DataSet, DataSetCommand usage
 Optimized for performance by using stored procs
 Implements all business rules
 Validation of business objects (for example,
Customer EMail)
 Updating business objects
 Calculations (Shipping Cost, Taxes)
 All data access performed through DataAccess
 Implements logical business subsystems
 CustomerSystem: Profile management
 OrderSystem: Order management
 ProductSystem: Catalog
 Reads data through DataAccess
 Data validated and updated using BusinessRules
 BusinessFacade encapsulates all business-related
 Implements the user interface for Web access
 Uses ASP.NET architecture
 Employs Web Forms model
 Uses code behind forms
 Manages state
 Uses custom Web Controls
 All functionality accessed through BusinessFacade
Shop at Duwamish
 Demo: Duwamish in Action
Exploring Duwamish
 Exploring ADO.NET Features in Duwamish
Legal Notices
Unpublished work.  2001 Microsoft Corporation. All rights
Microsoft, Visual Basic, Visual Studio, and Windows are either
registered trademarks or trademarks of Microsoft Corporation
in the United States and/or other countries.
The names of actual companies and products mentioned
herein may be the trademarks of their respective owners.