ado .net

26
1 ADO .NET

Upload: nico

Post on 06-Jan-2016

29 views

Category:

Documents


0 download

DESCRIPTION

ADO .NET. .NET Framework Data Namespaces. System.Data Base set of classes and interfaces for ADO .NET System.Data.Common Classes shared by the .NET Data Providers System.Data.OleDb Classes that make up the .NET Data Provider for OLEDB System.Data.SqlClient - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ADO .NET

1

ADO .NET

Page 2: ADO .NET

2

.NET Framework Data Namespaces

• System.Data– Base set of classes and interfaces for ADO .NET

• System.Data.Common– Classes shared by the .NET Data Providers

• System.Data.OleDb– Classes that make up the .NET Data Provider for OLEDB

• System.Data.SqlClient– Classes that make up the .NET Data Provider for SQL Server

• System.Data.SqlTypes– Classes that represent the SQL data types

• System.XML– Classes for working with XML data

Page 3: ADO .NET

3

.NET Data Providers (1)

• A Data Provider supports data access through its own specific implementation that supports a common set of interfaces

• Two standard .NET Data Providers• SQL provider – for MS SQL Server 7.0 or later• OLE DB provider – for OLE DB support, e.g. Oracle, OL

E DB .NET Data Provider as a wrapper around an OLE DB provider

• Each .NET Data Provider is implemented as a group of types that reside in System.Data.SqlClient and System.Data.OleDb namespaces

Page 4: ADO .NET

4

.NET Data Providers (2)

OLE DBProvider

ODBCProvider

SQL .NET Data Provider

Client OLE DB.NET Data Provider

OtherDBMS

OtherDBMS

SQLServer

Managed Code

Page 5: ADO .NET

5

.NET Data Providers (3)

• Some fundamental classes supported by any .NET Data Provider

• Connection – allows establishing and releasing connections, and to begin transactions

• Command – allows storing and executing a command (SQL query, stored procedure)

• DataReader – provides direct, sequential (forward-only), read-only access to data in a database

• DataAdapter – built on DataReader, this class creates and populates instances of the class DataSet. DataSets allow more flexible access to data than using just DataReader

Page 6: ADO .NET

6

.NET Data Providers (4)

• Clients can access data through a DataReader (straightforward one-row-at-a-time) or by using a DataSet (more complex requirements such as ordering, filtering, sending results across a network etc.)

Rows

DataSet

Connection

Command

DataReader

DataAdapter

DBMS

Client

.NET Data Provider

Page 7: ADO .NET

7

Accessing Data with Reader

1. Create a Connection object (of class SqlConnection or OleDbConnection)

• set ConnectionString property

2. Create a Command object (of class SqlCommand and OleDbCommand) by Connection object’s CreateCommand method

• Set CommandText property

3. Call the Open() method of the Connection object4. Declare a DataReader (if need)5. Executing the query by calling methods of the Command object

• ExecuteReader(): returns a DataReader, can be accessed one row at a time

• ExecuteScalar(): returns a single value, e.g. result of SUM function• ExecuteNonQuery(): returns the number of rows affected

6. Process the result7. Close the DataReader (if using ExecuteReader)8. Close the Connection with the Close() method

Page 8: ADO .NET

8

AdoExample1 Sub Main() Dim query As String = "SELECT StudentID, Name, Sex FROM Students" Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=school.mdb"

Dim conn As OleDbConnection = New OleDbConnection(connStr) Dim command As OleDbCommand = New OleDbCommand(query, conn) Dim reader As OleDbDataReader

Try conn.Open() ' open connection reader = command.ExecuteReader() ' execute the command While reader.Read() ‘ process records Console.WriteLine("ID: {0}, Name: {1}", reader.GetString(0), reader.GetString(1)) End While Catch ex As OleDbException Console.Out.WriteLine(ex.Message) Finally reader.Close() conn.Close() End TryEnd Sub

Page 9: ADO .NET

9

Accessing Data with DataSets (1)

• A DataSet is an in-memory cache for data• Disconnected: manipulate data without connecting the d

atabase, allow you to move data across a network• DataSets allow much more flexible access to data, can e

xamine data in an arbitrary way, scrolling back and forth• Datasets are used in conjunction with DataAdapters. Dat

aAdapters populate DataSets with data from data stores.• Useful for combining data from different data sources, an

d for data transfer across a network (as DataSets are serializable)

Page 10: ADO .NET

10

Accessing Data with DataSets (2)

DataTable

DataTable

DataRelation

•Each DataSet can contain zero or more DataTable objects.•Each DataTable can contain the result of some query•A DataSet can also maintain relationships among DataTables using DataRelation objects•Each DataSet has a schema, describing the tables, columns, data types

Page 11: ADO .NET

11

Creating and Using DataSets1. Create a Connection object

• set ConnectionString property

2. Create a Command object• Set CommandText property

3. Create a DataAdapter object (SqlDataAdapter, OleDbDataAdapter)

• Set the SelectCommand, InsertCommand, UpdateCommand, DeleteComand property to the Command object created in last step

4. Create a DataSet object5. Call the Open() method of the Connection object6. Use the Fill() method of the DataAdapter object to fill the

DataSet7. Close the Connection with the Close() method8. You may then update/delete rows in DataSet and use the

Update() method of the DataAdapter to update the database

Page 12: ADO .NET

12

AdoExample3

Sub Main() Dim query As String = "SELECT StudentID, Name, Sex FROM Students" Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=school.mdb" Dim conn As OleDbConnection = New OleDbConnection(connStr) Dim command As OleDbCommand = New OleDbCommand(query, conn)

Dim da As OleDbDataAdapter = New OleDbDataAdapter(command) ‘ set the SelectCommand as well

Dim ds As DataSet = New DataSet

Dim table As DataTable Dim row As DataRow Dim rowIndex As Integer

Try conn.Open() ' open connection da.Fill(ds, “Students”) ‘ fill the dataset conn.Close() ‘ connection can be closed (disconnected)

table = ds.Tables.Item(“Students”) ‘ select the DataTable For rowIndex = 0 To table.Rows.Count - 1 row = table.Rows.Item(rowIndex) Console.Out.WriteLine("ID: {0}, Name: {1}", _ row("StudentID"), row("Name")) Next Catch ex As OleDbException Console.Out.WriteLine(ex.Message) End TryEnd Sub

Page 13: ADO .NET

13

DataAdapter Properties

• SelectCommand– contains a Command object that can be used to populate a Data

Table within DataSet– Command object typically references a SQL SELECT statement

• InsertCommand– to insert rows added to a DataTable into an underlying database– Command object typically references a SQL INSERT statement

• UpdateCommand– to update a database based on changes made to a DataTable– Command object typically references a SQL UPDATE statement

• DeleteCommand– to delete rows in a database based on deletions made to a Data

Table– Command object typically references a SQL DELETE statement

Page 14: ADO .NET

14

DataAdapter Methods

• Fill– Used to execute a query (in the SelectComma

nd) and store the result in a DataSet– Da.Fill(Ds, “TableName”)– Note that the connection can be closed once t

he Fill method is done

• Update– Used to modify data in the database based on

changes made to the DataTables

Page 15: ADO .NET

15

DataSet Contents

• Contents of a DataSet are grouped into collections

• DataSet has a Tables property– a collection of DataTable– table = ds.Tables.Item(“Students”)– table = ds.Tables.Item(0)

• DataTable has a Rows property– a collection of DataRow– row = table.Rows.Item(rowIndex)– Column values can be obtained by row("StudentID") or row(0)

• Relations collection

Page 16: ADO .NET

16

Basic ObjectsDim query As String = "SELECT * FROM Students"Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=school.mdb"

Dim conn As OleDbConnection = New OleDbConnection(connStr)Dim command As OleDbCommand = New OleDbCommand(query, conn)

Dim da As OleDbDataAdapter = New OleDbDataAdapter(command)

' commandBuilder is used create the Commands automatically! Must be for UPDATE

Dim autogen As New OleDbCommandBuilder(da)

Page 17: ADO .NET

17

Adding Data Using a DataSet Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

btnAdd.Click

Dim ds As DataSet = New DataSet

Dim table As DataTable

Dim row As DataRow

Try

da.Fill(ds, "Students") ' fill the dataset

table = ds.Tables.Item("Students") ' select the DataTable

row = table.NewRow()

row("StudentID") = "A90001"

row("Name") = "Chan Chan"

row("Sex") = "M"

row("DateOfBirth") = #10/31/2005#

row("PhoneNo") = "12345678"

row("Class") = "41111"

table.Rows.Add(row)

da.Update(ds, "Students")

Catch ex As OleDbException

Console.Out.WriteLine(ex.Message)

End Try

End Sub

Page 18: ADO .NET

18

Updating Data Using a DataSet Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles btnUpdate.Click

Dim ds As DataSet = New DataSet

Dim table As DataTable

Dim row As DataRow

Dim rowIndex As Integer

Try

da.Fill(ds, "Students") ' fill the dataset

table = ds.Tables.Item("Students") ' select the DataTable

For rowIndex = 0 To table.Rows.Count - 1

row = table.Rows.Item(rowIndex)

If row("StudentID") = "A90001" Then

row("Sex") = "F"

End If

Next

Catch ex As OleDbException

Console.Out.WriteLine(ex.Message)

End Try

da.Update(ds, "Students")

End Sub

Page 19: ADO .NET

19

Deleting Data Using a DataSet Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles btnDelete.Click

Dim ds As DataSet = New DataSet

Dim table As DataTable

Dim row As DataRow

Dim rowIndex As Integer

Try

da.Fill(ds, "Students") ' fill the dataset

table = ds.Tables.Item("Students") ' select the DataTable

For rowIndex = 0 To table.Rows.Count - 1

row = table.Rows.Item(rowIndex)

If row("StudentID") = "A90001" Then

row.Delete()

End If

Next

Catch ex As OleDbException

Console.Out.WriteLine(ex.Message)

End Try

da.Update(ds, "Students")

End Sub

Page 20: ADO .NET

20

AdoExample4

• Add/Update/Delete

Page 21: ADO .NET

21

Binding a DataSet to a Control

• Setup the connection and dataadapter

• Select the DataAdapter, generate the DataSet

• Set the DataSource property of the control– e.g. datagridview1.DataSource = myDataTabl

e

• AdoExample5

Page 22: ADO .NET

22

Using SQL to Query Data (1)‘ Assume connection object is setup alreadyDim sql As String = “SELECT * FROM STUDENTS”

Try

conn.Open() Dim da As New OleDbDataAdapter(sql, conn) Dim ds As New DataSet da.Fill(ds, "table") DataGrid1.DataSource = ds DataGrid1.DataMember = "table"

Catch e As Exception MsgBox("Error in executing the following SQL statement:" & vbCrLf & vbCrLf & sql &

vbCrLf & vbCrLf & e.Message)Finally conn.Close()End Try

Page 23: ADO .NET

23

Using SQL to Query Data (2) Dim sql As String = "SELECT StudentID, Name, Sex FROM Students“

Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=school.mdb" Dim conn As OleDbConnection = New OleDbConnection(connStr)

Dim command As OleDbCommand = New OleDbCommand(query, conn) Dim reader As OleDbDataReader

Try conn.Open() ' open connection reader = command.ExecuteReader() ' execute the command While reader.Read() ‘ process records Console.WriteLine("ID: {0}, Name: {1}", reader.GetString(0),

reader.GetString(1)) End While Catch ex As OleDbException Console.Out.WriteLine(ex.Message) Finally reader.Close() conn.Close() End Try

Page 24: ADO .NET

24

Using SQL to Update Data‘ Assume connection object is setup alreadyDim sql As String = “UPDATE STUDENTS SET Sex = “F”Dim command As OleDbCommand = New OleDbCommand(sql, conn)Dim rowAffected As Integer

Try conn.Open() rowAffected = command.ExecuteNonQuery()

MsgBox("Query executed, " & rowAffected & " rows affected")

Catch e As Exception MsgBox("Error in executing the following SQL statement:" & vbCrLf & vbC

rLf & sql & vbCrLf & vbCrLf & e.Message)Finally conn.Close()End Try

Page 25: ADO .NET

25

Using SQL Aggregate Functions Dim sql As String = "SELECT COUNT(*) FROM Students“

Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=school.mdb"

Dim conn As OleDbConnection = New OleDbConnection(connStr)

Dim command As OleDbCommand = New OleDbCommand(query, conn) Dim result As Integer

Try conn.Open() ' open connection result = command.ExecuteScalar() ' execute the command

Console.WriteLine(“The count is {0} ", result) Catch ex As OleDbException Console.Out.WriteLine(ex.Message) Finally conn.Close() End Try

Page 26: ADO .NET

26

DataReader Vs DataSet

• DataReader– Less memory consumed, fast access– Simple– One row at a time (forward sequential access)– Connection cannot be closed before finishing access

• DataAdapter + DataSet– More flexible, can examine data in an arbitrary way, s

crolling back and forth– Connection can be closed and accessing the DataSet

afterwards (i.e. DataSet can be de-linked with the connection)