disconnected data applications: using datasets, xml and transactions

54
Disconnected Data Applications: using Datasets, XML and Transactions

Post on 18-Dec-2015

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Disconnected Data Applications: using Datasets, XML and Transactions

Disconnected Data Applications: using Datasets, XML and Transactions

Page 2: Disconnected Data Applications: using Datasets, XML and Transactions

Overview

Adding ADO.NET Objects to and Configuring ADO.NET Objects in a Windows Forms Application

Accessing and Modifying Data by Using DataSets

Binding Data to Controls

Filtering and Sorting Data

Resolving Data Conflicts

Using Transactions

Page 3: Disconnected Data Applications: using Datasets, XML and Transactions

Adding ADO.NET Objects to and Configuring ADO.NET Objects in a Windows Forms Application

ADO.NET Objects

What Is a DataSet?

What Is a Typed DataSet?

How to Add ADO.NET Objects to and Configure ADO.NET Objects in a Windows Forms Application

Demo: Adding ADO.NET Objects to and Configuring ADO.NET Objects in a Windows Forms Application

Page 4: Disconnected Data Applications: using Datasets, XML and Transactions

ADO.NET Objects

Data SourceDataAdapterDataTable

DataTable

DataSet

DataAdapter

FillFill

UpdateUpdate

UpdateUpdate

FillFill

ConnectionConnectionUpdateCommandUpdateCommand

SelectCommandSelectCommand

SelectCommandSelectCommand

UpdateCommandUpdateCommand

Page 5: Disconnected Data Applications: using Datasets, XML and Transactions

What Is a DataSet?

Datasets can include multiple DataTables

Relationships between tables are represented using DataRelations

Constraints enforce primary and foreign keys

Use the DataRow and DataColumn to access values in Tables

DataTable

DataColumn

DataRow

DataRelation

Page 6: Disconnected Data Applications: using Datasets, XML and Transactions

What Is a Typed DataSet?

Typed datasets

Derive from the base DataSet class Provide type checking at compile time Provide faster access to tables and columns in the dataset Generated from XML Schema (.xsd) files by using the

XSD.exe tool To access tables and columns

Typed dataset

Untyped dataset

PubsDataSet.Tables("Titles");PubsDataSet.Tables("Titles");

PubsDataSet.Titles;PubsDataSet.Titles;

Page 7: Disconnected Data Applications: using Datasets, XML and Transactions

How to Add ADO.NET Objects to and Configure ADO.NET Objects in a Windows Forms Application

Drag an OleDbDataAdapter or SqlDataAdapter object from the Toolbox to a formDrag an OleDbDataAdapter or SqlDataAdapter object from the Toolbox to a form

Specify connection and SQL command information Specify connection and SQL command information

Select the adapter or adapters that will be used to transfer data between the data source and the datasetSelect the adapter or adapters that will be used to transfer data between the data source and the dataset

On the Data menu, choose Generate DatasetOn the Data menu, choose Generate Dataset

Select New and then specify a name for the new datasetSelect New and then specify a name for the new dataset

Page 8: Disconnected Data Applications: using Datasets, XML and Transactions

Demo: Adding ADO.NET Objects to and Configuring ADO.NET Objects in a Windows Forms Application

Add and configure a SQLConnection object on a Windows Form

Add and configure a SQLDataAdapter control on a Windows Form

Generate the dataset

Page 9: Disconnected Data Applications: using Datasets, XML and Transactions

Accessing and Modifying Data by Using DataSets

How to Populate a Dataset

How to Update Data in a Dataset

How to Update Data to a Data Source

Demo: Populating and Updating DataSets

How to Create Database Schema on the Client

Demo: Creating Database Schema by Using the XML Schema Designer

How to Read and Write XML Data into a DataSet

Page 10: Disconnected Data Applications: using Datasets, XML and Transactions

How to Populate a Dataset

Use the DataAdapter object to fill the dataset

SqlDataAdapter storesSQLDataAdapter;SqlCommand storesSelectSQLCommand;storesSelectSQLCommand.CommandText = "SELECT * FROM

stores";storesSelectSQLCommand.Connection = SqlConnection1;storesSQLDataAdapter.SelectCommand =

storesSelectSQLCommand;storesSQLDataAdapter.Fill(storesDataSet.Tables["Stores"]);

SqlDataAdapter storesSQLDataAdapter;SqlCommand storesSelectSQLCommand;storesSelectSQLCommand.CommandText = "SELECT * FROM

stores";storesSelectSQLCommand.Connection = SqlConnection1;storesSQLDataAdapter.SelectCommand =

storesSelectSQLCommand;storesSQLDataAdapter.Fill(storesDataSet.Tables["Stores"]);

Page 11: Disconnected Data Applications: using Datasets, XML and Transactions

How to Add a Record to the DataSet

Untyped datasets

Typed datasets

DataRow newDataRow = pubsDataSet.Tables["Titles"].NewRow();

newDataRow["title"] = "New Book";newDataRow["type"] = "business";pubsDataSet.Tables["Titles"].Rows.Add(newDataRow);

DataRow newDataRow = pubsDataSet.Tables["Titles"].NewRow();

newDataRow["title"] = "New Book";newDataRow["type"] = "business";pubsDataSet.Tables["Titles"].Rows.Add(newDataRow);

allData.darbiniekiRow dR = allDataSet.darbinieki.AdddarbiniekiRow(“John”,”B”,”[email protected]”,null,”Admin”);allData.darbiniekiRow dR = allDataSet.darbinieki.AdddarbiniekiRow(“John”,”B”,”[email protected]”,null,”Admin”);

Page 12: Disconnected Data Applications: using Datasets, XML and Transactions

Modifying Data in a Table

The BeginEdit method of DataRow class

Disables the raising of events and exceptions

EndEdit and CancelEdit methods of DataRow class

Enable the raising of events and exceptions

How to modify data in a table

Dim drEmployee As DataRow = dtEmployees.Rows(3)

drEmployee.BeginEdit()

drEmployee("FirstName") = "John"

drEmployee("LastName") = "Smith"

drEmployee.EndEdit()

Page 13: Disconnected Data Applications: using Datasets, XML and Transactions

How to Delete a Record

The Remove method of the DataRowCollection class

Completely removes the row from the collection

Example:

dtEmployees.Rows.Remove(drEmployee)

The Delete method of the DataRow class

Marks the row as deleted

Hidden, but still accessible if necessary

Example:

drEmployee.Delete

Page 14: Disconnected Data Applications: using Datasets, XML and Transactions

What Are the RowState and RowVersion Properties?

RowState property of a DataRow

Added, Deleted, Detached, Modified, Unchanged

DataViewRowState enumeration

Used with a DataView to filter rows of a certain state

CurrentRows, OriginalRows, and so on

DataRowVersion enumeration is used when retrieving values using the Item property

Current, Default, Original, Proposed

HasVersion method of a DataRow

AcceptChanges and RejectChanges methods

Page 15: Disconnected Data Applications: using Datasets, XML and Transactions

How to Update Data to a Data Source

SqlCommand insertTitlesCommand = new SqlCommand("Insert titles (title_id, title, type) values (@title_id,@title,@type)");

insertTitlesCommand.Parameters.Add("@title_id", SqlDbType.VarChar, 6, "title_id");

insertTitlesCommand.Parameters.Add("@title", SqlDbType.VarChar, 80, "title");

insertTitlesCommand.Parameters.Add("@type", SqlDbType.Char, 12, "type");

titlesSQLDataAdapter.InsertCommand = insertTitlesCommand;titlesSQLDataAdapter.Update(pubsDataSet, "titles");

SqlCommand insertTitlesCommand = new SqlCommand("Insert titles (title_id, title, type) values (@title_id,@title,@type)");

insertTitlesCommand.Parameters.Add("@title_id", SqlDbType.VarChar, 6, "title_id");

insertTitlesCommand.Parameters.Add("@title", SqlDbType.VarChar, 80, "title");

insertTitlesCommand.Parameters.Add("@type", SqlDbType.Char, 12, "type");

titlesSQLDataAdapter.InsertCommand = insertTitlesCommand;titlesSQLDataAdapter.Update(pubsDataSet, "titles");

Explicitly specifying the updates

Page 16: Disconnected Data Applications: using Datasets, XML and Transactions

Demo: Populating and Updating DataSets

Populate the dataset

Update the database

Page 17: Disconnected Data Applications: using Datasets, XML and Transactions

Defining Data Relationships

Using Foreign Key Constraints to Restrict Actions

How to Create a Foreign Key Constraint

What Is a DataRelation Object?

How to Create a DataRelation Object

How to Navigate Related DataTables

Page 18: Disconnected Data Applications: using Datasets, XML and Transactions

Using Foreign Key Constraints to Restrict Actions

A ForeignKeyConstraint enforces referential integrity

If the EnforceConstraints property of a DataSet is True

Restricting actions performed in related tables

DeleteRule and UpdateRule properties

ActionActionActionAction DescriptionDescriptionDescriptionDescription

CascadeCascade Deletes or updates related rows. This is the default.Deletes or updates related rows. This is the default.

SetNullSetNull Sets values in related rows to DBNull.Sets values in related rows to DBNull.

SetDefaultSetDefault Sets values in related rows to the DefaultValue.Sets values in related rows to the DefaultValue.

NoneNone No action is taken, but an exception is raised.No action is taken, but an exception is raised.

Page 19: Disconnected Data Applications: using Datasets, XML and Transactions

How to Create a Foreign Key Constraint

Use Properties window

DataSet must have at least two tables

Parent table must have a primary key

Add a ForeignKeyConstraint to the child table

Choose the matching columns

Choose Update and Delete rules

Write code

Page 20: Disconnected Data Applications: using Datasets, XML and Transactions

What Is a DataRelation Object?

Definition

A DataRelation object defines a navigational relationship, NOT a constraint relationship

Used by presentation objects (for example, a DataGrid) to allow easier navigation (for example, “drill down” capability from parent rows to child rows)

Used by expression columns to calculate aggregates

A DataSet has a Relations collection

Page 21: Disconnected Data Applications: using Datasets, XML and Transactions

How to Create a DataRelation Object

Use the Properties window

Or, write code

dsNorthwind.Relations.Add( _

"FK_CustomersOrders", _

dtCustomers.Columns("CustomerID"), _

dtOrders.Columns("CustomerID"), _

True) ' create a ForeignKeyConstraint too

Page 22: Disconnected Data Applications: using Datasets, XML and Transactions

How to Navigate Related DataTables

The GetChildRows method of the DataRow

Pass a DataRelation name as the parameter

Example:Dim drCustomer As DataRow

Dim drOrder As DataRow

For Each drCustomer In _

dsNorthwind.Tables("Customer").Rows

For Each drOrder In drCustomer.GetChildRows( _

"FK_CustomersOrders")

' process row

Next

Next

Page 23: Disconnected Data Applications: using Datasets, XML and Transactions

How to Create Database Schema on the Client

XML Schema (.xsd) files enforce data integrity on the client

Use the XML Designer to create and modify XML Schema files

1. Determine the schema design

2. On the Project menu, click Add New Item

3. Add the schema4. Create the schema

Page 24: Disconnected Data Applications: using Datasets, XML and Transactions

Demo: Creating and Using Data Relationships

In this demonstration, you will see how to create a DataRelation between tables in a DataSet and how to use it in a form.

Page 25: Disconnected Data Applications: using Datasets, XML and Transactions

How to Read and Write XML Data into a DataSet

Use ReadXML to load data from a file or stream

Write data and schema information from a DataSet to a file or stream by using the WriteXML method

purchaseDataSet.ReadXml("C:\\sampledata\\PurchaseData.xml",

XmlReadMode.IgnoreSchema);

purchaseDataSet.ReadXml("C:\\sampledata\\PurchaseData.xml",

XmlReadMode.IgnoreSchema);

purchaseDataSet.WriteXml("C:\\sampledata\\CurrentOrders.xml",

XmlWriteMode.IgnoreSchema);

purchaseDataSet.WriteXml("C:\\sampledata\\CurrentOrders.xml",

XmlWriteMode.IgnoreSchema);

Page 26: Disconnected Data Applications: using Datasets, XML and Transactions

Binding Data to Controls

How to Perform Simple Binding by Using the DataBindings Property

How to Perform Complex Data Binding by Using the DataBound Windows Forms Controls

How to Maintain the Currency of a Control by Using CurrencyManager

Demo: Binding Controls to Data and Maintaining the Currency of a Control by Using CurrencyManager

Page 27: Disconnected Data Applications: using Datasets, XML and Transactions

How to Perform Simple Binding by Using the DataBindings Property

txtCustomerAddress.DataBindings.Add("Text", dsNorthwindData1.Customers, "Address");

txtCustomerCity.DataBindings.Add("Text", dsNorthwindData1.Customers, "City");

txtCustomerAddress.DataBindings.Add("Text", dsNorthwindData1.Customers, "Address");

txtCustomerCity.DataBindings.Add("Text", dsNorthwindData1.Customers, "City");

Property of the control to which data is bound

Property of the control to which data is bound

Column in the tableColumn in the tableTable from the data sourceTable from the data source

To use the DataBindings Collection to bind a control to a data source, set the DataBinding property of the control to the data source

Page 28: Disconnected Data Applications: using Datasets, XML and Transactions

How to Perform Complex Data Binding by Using the DataBound Windows Forms Controls

Complex data binding

Bind a control property to a data table

Use with combo boxes, list boxes, data grids

Can bind controls to DataSets, Arrays, and ArrayLists

Complex databinding at design time

Set the DataSource and DataMember properties

Complex databinding at run time

DataGrid1.DataSource = productsDataSet;

DataGrid1.DataMember = "Products";

DataGrid1.DataSource = productsDataSet;

DataGrid1.DataMember = "Products";

Page 29: Disconnected Data Applications: using Datasets, XML and Transactions

How to Maintain the Currency of a Control by Using CurrencyManager

Datagrid

Data Source 1

Data Source 2

Currency Manager1Currency Manager1

TextBox1TextBox1

TextBox2TextBox2

Currency Manager2Currency Manager2

CurrencyManager cm;cm = (CurrencyManager)this.BindingContext[pubsDataSet, "Authors"];cm.Position += 1;

CurrencyManager cm;cm = (CurrencyManager)this.BindingContext[pubsDataSet, "Authors"];cm.Position += 1;

Page 30: Disconnected Data Applications: using Datasets, XML and Transactions

Demo: Binding Controls and Maintaining the Currency of a Control by Using CurrencyManager

Bind controls to columns in the dataset at design time

Bind controls to columns in the dataset at run time

maintain the currency of a control by using CurrencyManager

Page 31: Disconnected Data Applications: using Datasets, XML and Transactions

Sorting and Filtering

How to use the Select method

What Is a DataView Object?

How to Define a DataView

How to Use a DataView at Design Time

Page 32: Disconnected Data Applications: using Datasets, XML and Transactions

How to Use the Select Method

DataTables have a Select method

Gets an array of DataRow objects that match the filter in the order of the sort, and that match the specified state

Three optional parameters

Filter expression, for example, "City='London'"

Sort, for example, "CompanyName ASC"

DataViewRowState, for example, Deleted

Page 33: Disconnected Data Applications: using Datasets, XML and Transactions

What Is a DataView Object?

Server Data Store

Database

Connection Stored procedure

DataSet

DataTable

DataTable

Windows and Web controls

DataView

Page 34: Disconnected Data Applications: using Datasets, XML and Transactions

How to Define a DataView

Creating a DataView by using form controls

Creating a DataView programmatically

Dim dvProducts As New _ DataView(dsNorthwind.Tables("Products"))

dvProducts.Sort = "UnitPrice"

dvProducts.RowFilter = "CategoryID > 4"

grdProducts.DataSource = dvProducts

Applying a DataView to a DataTable

dvProducts.Table = _ dsNorthwind.Tables("Products")

Page 35: Disconnected Data Applications: using Datasets, XML and Transactions

How to Use a DataView at Design Time

DataViews allow sorting and filtering at design time

A DataView cannot span multiple DataTables, unlike the View object in SQL Server

Use presentation-level objects instead (for example, the DataGrid control, report designers, and so on)

Every DataTable has a DefaultView property

Page 36: Disconnected Data Applications: using Datasets, XML and Transactions

Demo: Sorting and Filtering data

Filter data with a Select method

Filter and sort data by using dataview object

Page 37: Disconnected Data Applications: using Datasets, XML and Transactions

Configuring a DataAdapter to Update the Underlying Data Source

How Does a DataSet Track Changes?

What Are the Data Modification Commands?

How to Set the Data Modification Commands Using the Data Adapter Configuration Wizard

Page 38: Disconnected Data Applications: using Datasets, XML and Transactions

How Does a DataSet Track Changes?

Each DataRow has a RowState property

Indicates the status of each row

Added, Deleted, Detached, Modified, Unchanged

The DataSet maintains two copies of data for each row

Original version

Current version

Page 39: Disconnected Data Applications: using Datasets, XML and Transactions

What Are the Data Modification Commands?

A SqlDataAdapter or OleDbDataAdapter object has command properties that are themselves command objects that you can use to modify data at the data source

InsertCommand

UpdateCommand

DeleteCommand

Page 40: Disconnected Data Applications: using Datasets, XML and Transactions

How to Set the Data Modification Commands Using the Data Adapter Configuration Wizard

You can create data modification commands by using the Data Adapter Configuration Wizard

The wizard can generate the commands in three different ways:

By using SQL statements

By creating new stored procedures

By using existing stored procedures

Page 41: Disconnected Data Applications: using Datasets, XML and Transactions

Persisting Changes to a Data Source

How the DataAdapter’s Update Method Modifies the Underlying Data Source

When to Use the GetChanges Method of a DataSet Object

How to Merge Changes into the DataSet

How to Update a Data Source by Using a DataSet

How to Accept Changes into the DataSet

Page 42: Disconnected Data Applications: using Datasets, XML and Transactions

How the DataAdapter’s Update Method Modifies the Underlying Data Source

Determines, which data modification operations have been carried out

Executes appropriate commands (insert, update or delete) for each added, modified or deleted row

Returns status information for each operation

Page 43: Disconnected Data Applications: using Datasets, XML and Transactions

When to Use the GetChanges Method of a DataSet Object

Use the GetChanges method when you need to give the changes to another class for use by another object

Code example

If dsCustomers.HasChanges(DataRowState.Modified) Then

Dim dsTemp As DataSet

dsTemp = dsCustomers.GetChanges(DataRowState.Modified)

DataGrid1.DataSource = dsTemp.Tables(0).DefaultView

End If

Use the GetChanges method to get a copy of a DataSet that contains all changes made to the DataSet

Since it was loaded, or

Since the last time the AcceptChanges method was called.

Page 44: Disconnected Data Applications: using Datasets, XML and Transactions

How to Merge Changes into the DataSet

Use the Merge method to merge two DataSets – an original, and one containing only the changes to the original

Code example

aDataSet.Merge(anotherDataSet)

The two merged DataSets should have similar schemas

Page 45: Disconnected Data Applications: using Datasets, XML and Transactions

Lesson: How to Handle Conflicts

What Conflicts Can Occur?

How to Detect Conflicts

How to Resolve Conflicts

Page 46: Disconnected Data Applications: using Datasets, XML and Transactions

What Conflicts Can Occur?

Disconnected applications use optimistic concurrency

Releases database locks between data operations

Data conflicts can occur when you update the database

Another application or service might have already changed the data

Examples

Deleting a previously deleted row

Changing a previously changed column

Page 47: Disconnected Data Applications: using Datasets, XML and Transactions

How to Detect Conflicts

The Data Adapter Configuration Wizard can generate SQL statements to detect conflicts

When you update the database:

Data modification commands compare the current data in the database against your original values

Any discrepancies cause a conflict error

Page 48: Disconnected Data Applications: using Datasets, XML and Transactions

How to Resolve Conflicts

Use the HasErrors property to test for errors

Test a DataSet, DataTable, or DataRow Choose one of these strategies to resolve conflicts:

“Last in wins” Retain conflicting rows in your DataSet so you can

update the database again later Reject conflicting rows and revert to the original values

in your DataSet Reject conflicting rows and reload the latest data from

the database

Page 49: Disconnected Data Applications: using Datasets, XML and Transactions

Demo: How to Update a Data Source by Using a DataSet

Configuring the dataadapter using dataadapter wizard

Configuring parameters for dataadapter commands – using optimistic concurrency

Using GetChanges method

Resolving conflicts

Page 50: Disconnected Data Applications: using Datasets, XML and Transactions

Using Transactions

What Is a Transaction?

How to Manage Transactions Using SQL Statements

How to Manage Transactions Using ADO.NET

What Are Isolation Levels?

Page 51: Disconnected Data Applications: using Datasets, XML and Transactions

What Is a Transaction?

A transaction is a set of related tasks that either succeed or fail as a unit

Two types of transactions

Local transactions

Distributed transactions

Page 52: Disconnected Data Applications: using Datasets, XML and Transactions

How to Manage Transactions Using SQL Statements

SQL transaction statements BEGIN TRANS, COMMIT TRANS, ROLLBACK TRANS

Code example

BEGIN TRANS

DECLARE @orderDetailsError int, @productError int

DELETE FROM "Order Details" WHERE ProductID=42

SELECT @orderDetailsError = @@ERROR

DELETE FROM Products WHERE ProductID=42

SELECT @productError = @@ERROR

IF @orderDetailsError = 0 AND @productError = 0

COMMIT TRANS

ELSE

ROLLBACK TRANS

Page 53: Disconnected Data Applications: using Datasets, XML and Transactions

How to Manage Transactions Using ADO.NET

XxxConnection – for example, SqlConnection BeginTransaction

XxxTransaction – for example, SqlTransaction Commit Rollback

Page 54: Disconnected Data Applications: using Datasets, XML and Transactions

What Are Isolation Levels?

Examples of concurrency problems Guidelines for setting the isolation level Code example

trans = cnNorthwind.BeginTransaction( _

IsolationLevel.Serializable)

Support for isolation levels is dependent on which database you use