Why ADO.NET - Wildermuth

Download Report

Transcript Why ADO.NET - Wildermuth

Why ADO.NET
Not your father’s Data Access
http://adoguy.com
Who I am
Shawn Wildermuth
 [email protected]
 Author of “Pragmatic ADO.NET
 Editor of http://OnDotNet.com
 For More Info: http://adoguy.com
 This Presentation can be found at:

– http://adoguy.com/presentations
http://adoguy.com
Short History of Data Access
VT Objects
 Data Access Objects (DAO/Jet)
 Open Database Connectivity (ODBC)
 OLE for Databases (OLE/DB)
 ActiveX Data Objects (ADO)

http://adoguy.com
Why is ADO.NET Better?
Disconnected by Design
 Relational by Nature
 Integration with XML
 Framework Supports Real Database
Schema

http://adoguy.com
Connected vs. Disconnected
“The Pizza Delivery Guy”
 Connections are expensive
 Keeping connections alive longer than
necessary is extremely wasteful
 Long lived connections impede load
balancing
 Connections unnecessary while
manipulating database results

http://adoguy.com
Introducing ADO.NET
Managed Providers
 DataSet
 DataBinding in ASP.NET
 DataBinding in WinForms

http://adoguy.com
Managed Providers
ADO.NET’s Version of Providers (ADO,
OLE/DB) and Drivers (ODBC)
 Not the only way to access data in .NET
(most notably the Xml classes)
 Made up of a number of managed classes
that implement known interfaces

http://adoguy.com
System.Data Namespace
Dataset
DataRow
Data Relation
DataTable
DataColumn
ForeignKeyConstraint
etc.
System.Data.Common Namespace
DataAdapter
DataTableMapping
DbDataRecord
etc.
System.Data.SqlClient
Namespace
System.Data.OleDb
Namespace
Your Provider
SqlConnection
OleDbConnection
YourConnection
SqlCommand
OleDbCommand
YourCommand
SqlDataReader
OleDbDataReader
YourDataReader
etc.
etc.
http://adoguy.com
etc.
Managed Provider Abstraction
System.Data.SqlClient
System.Data
SqlConnection
SqlDataAdapter
SqlCommand
DataSet
SqlDataReader
SqlParameters
SqlParameter
SqlErrors
SqlError
http://adoguy.com
using System;
using System.Data;
using System.Data.OleDb;
class HelloADONET
{
static void Main()
{
OleDbConnection conn = new OleDbConnection("...");
conn.Open();
OleDbCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM AUTHORS";
OleDbDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
Console.WriteLine(rdr["au_id"]);
conn.Close();
}
}
http://adoguy.com
What are DataSets?
Disconnected set of Database Data?
 In-Memory Database (IMDB)?
 A complex, relational data structure with
built-in support for XML serialization?
 All three?

http://adoguy.com
The DataSet
DataSet
Tables
DataTable
DataTable
Rows
Rows
DataRow
DataRow
DataRelation
Constraint
ForeignKeyConstraint
http://adoguy.com
using System;
using System.Data;
using System.Data.SqlClient;
class HelloADONET
{
static void Main()
{
SqlConnection conn = new SqlConnection("...");
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = conn.CreateCommand();
da.SelectCommand.CommandText = "SELECT * FROM AUTHORS";
DataSet dataSet = new DataSet();
da.Fill(dataSet);
}
}
http://adoguy.com
Typed DataSets
Strong Typing
 XSD Based Schema
 Simple to Setup relationships, constraints,
etc.
 Not very much use if you have amorphous
data

http://adoguy.com
Type DataSet Demo
http://adoguy.com
Using DataSets
Bulk Data Loading is supported
 Two possible versions of all data,
RowState.Original and RowState.Modified
 Relationship Navigation
 DataViews

http://adoguy.com
The Hard Part

Disconnected Concurrency
– Optimistic Concurrency Supported by
CommandBuilders
– Optimistic Concurrency could be more
efficient
– Pessimistic Concurrency can be achieved
with Check-out, Check-in
http://adoguy.com
XML Integration

DataSets XML Serialization
– You can control the Serialization
– Full XSD Support
– Supports DiffGrams

XmlDataDocument
– View DataSets as XmlDocuments

SqlCommands and XmlReader
http://adoguy.com
Practical Applications of
DataSets

Stop Writing Business Objects!
– Derive from Typed DataSets
– Let ADO.NET do the Database work
– Write Just Your Business Logic
– Deal with data as Relationally
– or Hierarchically by using XmlDataDocument
http://adoguy.com
Scalability in ADO.NET
Scale Out the Database as DataSets in
the Middle Tier
 Use DiffGrams to Keep DataSets in Sync
 With SQL Server 2K

– Can use DiffGrams to update the database
– Caveats about different DiffGram format
http://adoguy.com
DataBinding in ASP.NET

ASP.NET DataBinding is read-only
– Can bind with DataReaders (but troublesome)
http://adoguy.com
DataBinding in ASP.NET (2)
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
protected ListBox ListBox1;
DataSet dataSet = new DataSet();
// ...
// DataBind
ListBox1.DataSource = dataSet;
ListBox1.DataMember = "Customers";
ListBox1.DataTextField = "CompanyName";
ListBox1.DataValueField = "CustomerID";
ListBox1.DataBind();
http://adoguy.com
DataBinding in WinForms

Different from ASP.NET
– Fully bidirectional
– No need to call DataBind()
– Allows binding to any property
using System.Data;
using System.Windows.Forms;
DataSet dataSet = new DataSet();
// ...
listBox1.DataSource = dataSet.Tables[0];
listBox1.DisplayMember = "CompanyName";
listBox1.ValueMember = "CustomerID";
http://adoguy.com
DataBinding in WinForms (2)

Master-Detail Binding
– Set multiple object to same DataSource
– Set DataMember to name of Relationship
– Use CurrencyManager to move the cursor if
you do not want to use the master control
http://adoguy.com
Quick Rants
Classic ADO has a role in .NET
 Batch Queries are cool!
 Caveats for SqlClient’s Connection
Pooling
 Trust your DBAs and strive to be like them
:)

http://adoguy.com
Questions?
http://adoguy.com