Overview of ADO.NET Whidbey
Download
Report
Transcript Overview of ADO.NET Whidbey
Scalable Development, Inc.
Building systems today that perform tomorrow.
Overview of ADO.NET
with the .NET Framework
.NET Experiences
PDC 2000 Build (July 2000).
Visual Studio 1.0 Beta 1 (November 2000).
Book began (January 2001).
Visual Studio 1.0 Beta 2 (June 2001).
First Production ASP.NET App (July 2001).
Production Windows Service (November 2001).
Runs today.
4 Production Applications by shipment.
Multiple running applications.
.NET Resources
– www.asp.net
AspAdvice – www.aspadvice.com
Windows Forms – www.windowsforms.net
Architecture –
msdn.microsoft.com/architecture
.NET News – www.dotnetwire.com
ASP.NET
Agenda
Design
Philosophy
Architectural Overview
Features
When to use What (Code Examples)
Summary
Design Philosophy
Unified
Data Story (data, xml, cache objects)
Data
is Data; object model is choice
XML objects feel like XML, Data objects feel like Data,
Typed Objects feel like objects
Factored
components
Explicit
model; no black boxes! (Customers/helper
code wires together components)
Predictable behaviour, semantics
Optimized performance
Disconnected
Relational DataSet
Get Data as fast as possible
Managed Data Overview
What Happened
to My RecordSet?
RecordSet
Updateable?
Scrollable? Bookmarks? Rowcount?
Holding server resources? Cache on client?
DataReader
Connected,
non-cached, FO/RO RecordSet
DataSet
Disconnected,
cached, scrollable data
DataAdapter
Logic
for populating the DataSet and propagating
changes back to the datasource
Managed Providers
Manages interaction to a data source
Managed equivalent of OLE DB layer
Directly exposes consumer interfaces
Not a full featured data store interface
Specific to (Optimized for) DataSource
Managed Provider Object Model
Connection
Like ADODB.Connection
Command
Like ADODB.Command
DataReader
Similar
to FO/RO ADODB.RecordSet
Fields accessed through strongly typed, indexed accessors
Database Support
System.Data.SQLClient
SQL
Server 7
SQL Server 2000
Oracle.DataAccess
(ODP.NET).
System.Data.Oracle (MS).
DB2 (only supports .NET 1.0).
MySql.
System.Data.OleDb
System.Data.Odbc ODBC drivers.
Oracle Managed Providers
Microsoft.
Oracle.
No support for COM+.
Requires Oracle 9iR2 client.
Oracle Support Through OleDb
Microsoft
Driver for Oracle. (MsDaOra)
7.x datatypes.
No 8.x datatypes.
Oracle OleDb Driver. (OraOleDb.Oracle)
7.x datatypes.
8.x datatypes.
9.x datatypes.
COM+ challenged.
Oracle Support Through ODBC
Microsoft
Oracle
Driver for Oracle.
ODBC driver.
Thread
challenged.
Oracle Gotchas
Use
the latest Oracle SQL Net.
Don’t
use COM+ transactions, unless you
need them. Info - Oracle is working on an
OleDb driver that supports COM+
transactions better.
Always
close connections!!!!!!
DataSet
Common client data store
Relational View
of Data
Tables, Columns,
Rows, Constraints,
Relations
DataSet
Tables
Table
Columns
Column
Constraints
Constraint
Rows
Row
Relations
Relation
Directly create metadata and insert data
DataSet
Common client data store
Explicit
Disconnected Model
Disconnected,
remotable object
No knowledge of data source or properties
Common Behaviour
Predictable performance characteristics
Strong Typing
3-D Collection
What to return from a DAL.
Uses DataReader underneath the covers.
Some column metadata is not available.
Data Adapter
Loads
a table from a data store and
writes changes back.
Exposes
two important methods:
Fill(DataSet,DataTable)
Update(DataSet,DataTable)
Provides
mappings between tables & columns
User provides insert/update/delete commands
Allows
use of Stored Procedures
CommandBuilder component available (not
used much in ASP.NET)
Allows
single DataSet to be populated from multiple
different datasources
ADO.NET and XML
The DataSet
Loads/saves XML data into/out of DataSet
Schema can be loaded/saved as XSD
Schema can be inferred from XML Data
The DataSet can be associated with an XmlDataDocument
Exposes a relational view over structured XML
According to the DataSet schema
Allows strong typing, control binding, relational access of
XML data
Allows XML tools (schema validation, XSL/T, XPath queries)
against relational data
Preserves full fidelity of XML Document
When to use What
Connected Data Access
Disconnected Data Access
Code Examples:
Retrieving Results
Insert, Update, and
Delete.
Code Examples:
Application Data
Loading XML
Client Cursor Updating
XML View of Relational Data
Code Example:
SQLXML
XML Manipulations
Connected Data Access
Connected Data Access - Managed Providers
Connection, Transaction
Connecting to DataSource
Starting/Ending
Transactions
Command, Parameters
Database Updates, Selects, DDL
DataReader
(FO/RO) Server Cursor
DataAdapter
Pushing data into Dataset
Reading changes out of DataSet
Code: Retrieving Results
‘Create and open an OleDbConnection
Dim OleDbCn as new OleDbConnection(“……”)
OleDbCn.Open()
‘Create and execute OleDbCommand
Dim OleDbCmd as new OleDbCommand("Select * from authors where ...", OleDbCn)
Dim dr as DataReader
dr = OleDbCmd.ExecuteReader()
‘Retrieve Results
while(dr.Read())
Console.WriteLine("Name = " + dr("au_lname“))
End while
dr.Close()
OleDbCn.Close() ‘This is VERY IMPORTANT
Disconnected Data Access
Disconnected Data Access - DataSet
Application Data
Remoting Results
SOAP, WebMethods, Remoting
Caching Results
ASP.NET Cache
Persisting results
Save Data as XML, Schema as XSD
User interaction
Scrolling, sorting, filtering
DataView, DataViewManager
Binding Windows controls
Code: Application Data
‘ Create an "Inventory" Table
Dim ds as new DataSet()
Dim inventory as new DataTable("Inventory")
inventory.Columns.Add("TitleID",typeof(Int32))
inventory.Columns.Add("Quantity",typeof(Int32))
ds.Tables.Add(inventory)
‘ Add a record to the Inventory table
Dim row as inventory.NewRow()
Row("TitleID“)=1
Row("Quantity“)=25
inventory.Rows.Add(row)
Code: Loading XML
‘Load DataSet with XML
Dim ds as new DataSet()
ds.ReadXml("inventory.xml")
‘Add a record to the Inventory table
Dim inventory as new DataTable = ds.Tables("Inventory“)
Dim row as DataRow = inventory.NewRow()
Row("TitleID“)=1
Row("Quantity“)=25
inventory.Rows.Add(row)
‘Write out XML
ds.WriteXml("updatedinventory.xml")
Code: Insert/Update/Delete
Dim OleDbCn as new OleDbConnection(“…….”)
Dim OleDbCM as new OleDbCommand(
“Insert/Update/Delete Command“, OleDbCn)
OleDbCn.Open()
OleDbCm.ExecuteNonQuery()
If OleDbCn.State <> ConnectionState.StateClosed then
OleDbCn.Close()
End if
OleDbCn = Nothing ‘Old habits die hard
Code: Client Cursor Updating (easy)
‘Populate DataSet
Dim OleDbDA as new OleDbDataAdapter(
"Select * from customers“, OleDbCn);
Dim ds as new Dataset()
OleDbDA.MissingSchemaAction = MissingSchemaAction.AddWithKey
OleDbDA.Fill(ds, "Customer")
‘Find customer w/PK value of 256
Dim dr as DataRow = ds.Tables("Customer“).Rows.Find(256)
‘Change LastName
Dr("LastName“) = "Smith"
‘Update DataBase
Dim OleDbCb as new OleDbCommandBuilder = OleDbCommandBuilder(da)
OleDbDa.Update(ds, "Customer")
Code: Client Cursor Operations (harder)
‘Populate DataSet
Dim OleDbDA as new OleDbDataAdapter(
"Select customerId, customerName from customers“, OleDbCn);
Dim ds as new Dataset()
Dim dr as DataRow
OleDbDA.Fill(ds, "Customer")
OleDbDA.InsertCommand = new OleDbCommand(“insert into customers
(CustomerName) values (@CustomerName)”, OleDbCn)
dr = ds.Tables(“Customer”).NewRow()
‘Add Customer Name
Dr("Customer Name“) = "Fred's Company"
‘Update DataBase
ds.Tables(“Customer”).Rows.Add(dr)
OleDbDA.Update(ds, “Customer”)
Notes on the Client Cursor Update
Individual
Can
commands are sent.
be wrapped in a transaction.
CommandBuilder
is “relatively” inefficient.
Code: Manual Transaction
Dim OleDbCM as new OleDbCommand(
“Insert/Update/Delete Command“, OleDbCn)
Dim OleDbTx as OleDbTransaction
OleDbTx = OleDbCn.BeginTransaction(Isolation.ReadUncommitted)
OleDbCm.Transaction = OleDbTx
Try
OleDbCn.Open()
OleDbCm.ExecuteNonQuery()
OleDbTx.Commit()
Catch exc as Exception
OleDbTx.RollBack()
Throw( new Exception( “Error Occurred”, exc.InnerException )
Finally
If OleDbCn.State <> ConnectionState.StateClosed then
OleDbCn.Close()
End if
End Try
OleDbCn = Nothing
Cleanup
Close
your connection objects and return
them to the connection pool.
Dispose
finalizer.
all objects. Don't wait on the
Great, Now What’s Missing?
Server-side
scrollable cursor support. (not an
issue for Oracle)
Complete
column information.
ADOX.Catalog
type of support. No support for
creating tables, columns, users, indexes, ……..
ADO Classic in .NET
Works.
Can
continue to use it.
Required for ADOX support.
Summary
ADO.NET
is…
Optimized for Data Access.
Managed Providers for connected
access
DataSet for disconnected, user
interaction
DataReader for connected RO use.
Open Architecture
No Black Boxes
Tightly Integrated with XML
DataSet reads/writes XML
XmlDataDocument integrates relational
and XML views
Scalable Development, Inc.
Building systems today that perform tomorrow.
Questions?
Scalable
Development, Inc.
Consulting & Development Services.
http://www.scalabledevelopment.com
865-693-3004.
[email protected]
END