ado.net overview ado.net classes. ado.net overview looking back odbc (open database connectivity) ...
TRANSCRIPT
ADO.NET OverviewLooking Back
ODBC (Open Database Connectivity) Interoperability to a wide range of database
management systems (DBMS) Widely accepted API Uses SQL as data access language
DAO (Data Access Objects) Programming interface for JET/ISAM databases Uses automation (ActiveX, OLE automation)
RDO (Remote Data Objects) Tighter coupling to ODBC Geared more to client/server databases (vs.
DAO)
ADO.NET OverviewLooking Back OLE DB
Broad access to data, relational and other Built on COM Not restricted to SQL for retrieving data Can use ODBC drivers Low-level (C++) interface
ADO (ActiveX Data Objects) Simple component-based, object-oriented
interface Provides a programming model to OLE DB
accessible outside of C++
ADO.NET OverviewLooking Back
ADO
ODBC Provider Simple Provider Native Provider
OLE DB Provider
ODBC
ODBC Driver
TextFile
Database Database
OLE DB Provider
Mainframe
OLE DB
Your Application
ADO.NET OverviewLooking Back ADO was designed as a connected,
tightly coupled model Appropriate for client/server architectures
Primarily relational (not hierarchical like XML)
Object design is not well factored Too many ways to do the same thing Objects try to do too much
Not originally designed for a distributed, n-tier environment
ADO.NET OverviewWhat Is ADO.NET? ADO .NET is a collection of classes,
interfaces, structures, and enumerated types that manage data access from relational data stores within the .NET Framework These collections are organized into
namespaces: System.Data, System.Data.OleDb,
System.Data.SqlClient, etc. ADO .NET is an evolution from ADO.
Does not share the same object model, but shares many of the same paradigms and functionality!
ADO.NET OverviewADO.NET Goals Well-factored design Highly scaleable through a robust
disconnected model Rich XML support
(hierarchical as well as relational) Data access over HTTP Maintain familiar ADO programming
model Keep ADO available via .NET COM
interoperability
ADO.NET OverviewManaged Providers Merges ADO and OLEDB into one layer Each provider contains a set of classes
that implement common interfaces Initial managed provider
implementations: ADO Managed Provider: provides access to
any OLE DB data source
SQL Server Managed Provider: provides optimal performance when using SQL Server
Exchange Managed Provider: retrieve and update data in Microsoft Exchange
ADO.NET OverviewManaged Providers
SQL Managed Provider
SQL ServerDatabase
ADO.NET Managed Provider
ADO Managed Provider
OLE DB Provider
Database
Your Application
ADO.NET OverviewData Access Styles Connected: Forward-only, read-only
Application issues query then reads back results and processes them
“Firehose” cursor DataReader object
Disconnected Application issues query then retrieves
and stores results for processing Minimizes time connected to database DataSet object
ADO.NET OverviewData Binding Key component of Web Forms
framework Flexible and easy to use
Bind a control’s property to information in any type of data store
Provides control over how data moves back and forth
Simple controls for displaying a single value Complex controls for displaying a data
structure<asp:Label runat=server Text='<%# CustList(0).FirstName %>'/>
Agenda
Database Theory and History Relational Database Concepts and
Terminology ADO.NET Overview ADO.NET Classes
ADO.NET ClassesIDbConnection Interface Creates a unique session with a data
source Implemented by SqlDbConnection and OleDbConnection
Functionality Open, close connections Begin transactions
IDbTransaction provide Commit and Rollback methods
Used in conjunction with IDbCommand and IDataAdapter objects
Additional properties, methods and collections depend on the provider
ADO.NET Classes IDbCommand Interface
Represents a statement to be sent to a data source Usually, but not necessarily SQL
Implemented by OleDbCommand and SqlCommand Functionality
Define statement to execute Execute statement Pass and retrieve parameters Create a prepared (compiled) version of command
ExecuteReader returns rows, ExecuteNonQuery doesn’t, ExecuteScalar returns single value
Additional properties, methods and collections depend on the provider
ADO.NET Classes IDataReader Interface Forward-only, read-only (“fire hose”)
access to a stream of data Implemented by SqlDataReader and OleDbDataReader
Created via ExecuteReader method of IDbCommand
Operations on associated IDbConnection object disallowed until reader is closed
ADO.NET Classes System.Data.OleDb Namespace Managed provider for use with OLEDB
providers SQLOLEDB (SQL Server) – use
System.Data.SQL MSDAORA (Oracle) JOLT (Jet) OLEDB for ODBC providers
OleDbConnection, OleDbCommand and OleDbDataReader classes
Classes for error handling Classes for connection pooling
ADO.NET Classes DataReader Example
string sConnString = “Provider=SQLOLEDB.1;” + “User ID=sa;Initial Catalog=Northwind;” + “Data Source=MYSERVER”;
OleDbConnection conn = new OleDbConnection(sConnString);conn.Open();string sQueryString = “SELECT CompanyName FROM Customers”;OleDbCommand myCommand = new OleDbCommand(sQueryString, conn);OleDbDataReader myReader = myCommand.ExecuteReader();while (myReader.Read()) { Console.WriteLine(myReader.GetString(0));}myReader.Close();conn.Close();
ADO.NET ClassesSystem.Data Namespace Contains the core classes of the
ADO.NET architecture Disconnected DataSet is central Supports all types of applications
Internet based ASP.NET XML
Windows forms based
ADO.NET ClassesSystem.Data Namespace Contains classes used by or derived
from managed providers
IDbConnection, IDbCommand, IDbDataReader
ADO.NET Classes DataSet A collection of tables Has no knowledge of the source of the data Keeps track of all relationships among tables Rich programming model (has objects for
tables, columns, relationships, and so on) Remembers original and current state of
data Can dynamically modify data and metadata Native serialization format is XML Located in System.Data
ADO.NET Classes System.Data.SqlClient Namespace Managed provider native to SQL Server Built on TDS (Tabular Data Stream) for
high performance in SQL Server SqlConnection, SqlCommand and SqlDataReader classes
Classes for Error handling Connection pooling (implicitly enabled by
default ) System.Data.SqlTypes provides
classes for native SQL Server data types
ADO.NET Classes IDataAdapter Interface Populates or sends updates to a DataSet Implemented by OleDbDataAdapter and SqlDataAdapter
Not connection based Represents an asynchronous approach A superset of a command object Contains four default command objects
for Select, Insert, Update, and Delete
ADO.NET Classes DataSet Example
string sConnString = “Persist Security Info=False;” + “User ID=sa;Initial Catalog=Northwind;” + “Data Source=MYSERVER”;
SqlConnection conn = new SqlConnection(sConnString);conn.Open();string sQueryString = “SELECT CompanyName FROM Customers”;SqlDataAdapter myDSAdapter = new SqlDataAdapter();DataSet myDataSet = new DataSet();myDSAdapter.SelectCommand = new SqlCommand(sQueryString, conn);myDSAdapter.Fill(myDataSet);conn.Close();
ADO.NET Classes DataTable In-memory object representing one
table Columns Rows
Schema defined by Columns collection Data integrity provided through Constraint objects
Public events Modifying/deleting rows Modifying columns
ADO.NET Classes DataColumn
Fundamental building block of a DataTable schema (contained in Columns collection)
Defines what type of data may be entered (via DataType property)
Other important properties include AllowNull, Unique, and ReadOnly
Can contain Constraints (a collection on DataTable)
Can contain Relations (collection on DataSet)
ADO.NET Classes DataRow Represents data in a DataTable
(contained in Rows collection) Conforms to schema defined by
DataColumns Properties for determining row state
(e.g., new, changed, deleted, etc.) All additions/modifications
“committed” with AcceptChanges method of DataTable
ADO.NET Classes DataRelation Relates two DataTables via DataColumns
DataType value of both DataColumns must be identical
Updates can be cascaded to child DataTables
Modifications that invalidate the relation are disallowed
ADO.NET Classes Creating a DataSet in Code
Create DataSet Define tables
DataSet dataset = new DataSet();dataset.DataSetName = “BookAuthors”;
DataTable authors = new DataTable(“Author”);DataTable books = new DataTable(“Book”);
ADO.NET Classes Creating a DataSet in Code
Define columns Define keys
DataColumn id = authors.Columns.Add("ID", typeof(Int32));id.AutoIncrement = true;authors.PrimaryKey = new DataColumn[] {id};
DataColumn name = new authors.Columns.Add("Name",typeof(String));
DataColumn isbn = books.Columns.Add("ISBN", typeof(String));books.PrimaryKey = new DataColumn[] {isbn};
DataColumn title = books.Columns.Add("Title", typeof(String));DataColumn authid = books.Columns.Add(“AuthID”,typeof(Int32));DataColumn[] foreignkey = new DataColumn[] {authid};
ADO.NET Classes Creating a DataSet in Code
Add the tables to the DataSet
dataset.Tables.Add (authors);dataset.Tables.Add (books);
ADO.NET Classes Creating a DataSet in Code
Add data and save the DataSet
DataRow shkspr = authors.NewRow();shkspr["Name"] = "William Shakespeare";authors.Rows.Add(shkspr);
DataRelation bookauth = new DataRelation("BookAuthors",
authors.PrimaryKey, foreignkey);dataset.Relations.Add (bookauth);
DataRow row = books.NewRow();row["AuthID"] = shkspr["ID"];row["ISBN"] = "1000-XYZ";row["Title"] = "MacBeth";books.Rows.Add(row);
dataset.AcceptChanges();
ADO.NET ClassesTyped DataSets
Typed DataSet Derived from base DataSet class Uses XML schema to generate new class Tables, columns, etc. compiled into new class
Untyped DataSet No built-in schema Tables, columns, etc. exposed only as collections
ds.Customers.FirstName
ds.Tables[“Customers”].Rows[0][“FirstName”]
ADO.NET Classes Errors and Exceptions Error class
Contains information on an error or warning returned by data source
Created and managed by Errors class Errors class
Contains all errors generated by an adapter Created by Exception class
Exception class Created whenever an unhandled error occurs Always contains at least one Error instance
ADO.NET Classes Errors and Exceptions Example
try { DataTable myTable = new DataTable(); myTable.Columns.Add(“myCol”); myTable.Columns.Add(“myCol”); //whoops!}catch (DataException myException) { Console.WriteLine ("Message: " + myException.Message + "\n" + "Source: " + myException.Source + "\n" + “Stack Trace: " + myException.StackTrace + "\n");}
Conclusion
Database Theory and History Relational Database Concepts and
Terminology ADO.NET Overview ADO.NET Classes
Resources
Introducing ADO+ http://msdn.microsoft.com/msdnmag/issues/1100/adoplus/adoplus.asp
ADO.NET http://msdn.microsoft.com/library/default.asp?URL=/library/dotnet/
cpguide/cpconaccessingdata.htm
ADO+ Guides the Evolution of the Data Species http://msdn.microsoft.com/library/techart/adoplus.htm
ADO.NET for the ADO Programmer http://msdn.microsoft.com/library/techart/adonetdev.htm
ADO Rocks and Rolls in .NET Applications http://msdn.microsoft.com/library/welcome/dsmsdn/data02222001.htm
Meditating on OLE DB and .NET http://msdn.microsoft.com/library/welcome/dsmsdn/data03222001.htm
Resources
Reading Data Reader Secrets http://msdn.microsoft.com/library/welcome/dsmsdn/data04122001.htm
Database-like Data Containers http://msdn.microsoft.com/library/default.asp?URL=/library/welcome/
dsmsdn/data04122001.htm
ADO http://msdn.microsoft.com/library/default.asp?URL=/library/psdk/
dasdk/ados4piv.htm
Universal Data Access http://www.microsoft.com/data/
SQL Server http://www.microsoft.com/sql/default.asp
AppendixADO vs. ADO.NET ADO is a slower automation layer
over OLE DB for use in Visual Basic, etc.
ADO.NET provides direct, fast access to data from any language
ADO.NET essentially has merged OLE DB and ADO into a single layer
AppendixADO vs. ADO.NET
Feature ADO ADO.NETMemory-resident Data Representation
Uses RecordSet, which can contain one table
Uses DataSet, which can contain one or more tables represented by DataTables
Relationship Between Multiple Tables
Require the JOIN query Supports the DataRelation object
Data Visitation Scans RecordSet rows sequentially
Uses a navigation paradigm for non-sequential access
Disconnected Access Provided by RecordSet but typically supports connected access
Communicates with standardized calls to the DataAdapter
AppendixADO vs. ADO.NET
Feature ADO ADO.NETProgrammability Uses Connection object
to transmit commandsUses strongly typed programming characteristics of XML
Sharing Disconnected Data Between Tiers or Components
Uses COM marshalling to transmit disconnected Recordset
Transmits a DataSet with an XML file
Transmitting Data Through Firewalls
Problematic because firewalls are typically configured to prevent system-level requests
Supported, DataSet object use XML, which can pass through firewalls
Scalability Database locks and active database connections for long durations
Disconnected access to database data without retaining database locks