Download Module 4: Using Data in Windows Forms Applications

Document related concepts

Concurrency control wikipedia , lookup

Relational model wikipedia , lookup

Clusterpoint wikipedia , lookup

Entity–attribute–value model wikipedia , lookup

Extensible Storage Engine wikipedia , lookup

Functional Database Model wikipedia , lookup

Database model wikipedia , lookup

Transcript
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
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
ADO.NET Objects
DataSet
DataAdapter
DataTable
Data Source
SelectCommand
Fill
Update
UpdateCommand
DataAdapter
DataTable
SelectCommand
Fill
Update
UpdateCommand
Connection
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
DataColumn
DataRow
DataTable
DataRelation
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
 Untyped dataset
PubsDataSet.Tables("Titles");

Typed dataset
PubsDataSet.Titles;
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 form
Specify connection and SQL command information
Select the adapter or adapters that will be used to transfer data
between the data source and the dataset
On the Data menu, choose Generate Dataset
Select New and then specify a name for the new dataset
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
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
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"]);
How to Add a Record to the DataSet

Untyped datasets
DataRow newDataRow =
pubsDataSet.Tables["Titles"].NewRow();
newDataRow["title"] = "New Book";
newDataRow["type"] = "business";
pubsDataSet.Tables["Titles"].Rows.Add(newDataRow);

Typed datasets
allData.darbiniekiRow dR =
allDataSet.darbinieki.AdddarbiniekiRow(“John”,”B”,”[email protected]”,null,”Admin”);
Modifying Data in a Table

The BeginEdit method of DataRow class


EndEdit and CancelEdit methods of DataRow class


Disables the raising of events and exceptions
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()
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
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
How to Update Data to a Data Source

Explicitly specifying the updates
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");
Demo: Populating and Updating DataSets

Populate the dataset

Update the database
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
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
Action
Description
Cascade
Deletes or updates related rows. This is the default.
SetNull
Sets values in related rows to DBNull.
SetDefault
Sets values in related rows to the DefaultValue.
None
No action is taken, but an exception is raised.
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
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
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
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
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 schema
4. Create the schema
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.
How to Read and Write XML Data into a DataSet

Use ReadXML to load data from a file or stream
purchaseDataSet.ReadXml
("C:\\sampledata\\PurchaseData.xml",
XmlReadMode.IgnoreSchema);

Write data and schema information from a DataSet to a
file or stream by using the WriteXML method
purchaseDataSet.WriteXml
("C:\\sampledata\\CurrentOrders.xml",
XmlWriteMode.IgnoreSchema);
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
How to Perform Simple Binding by Using the
DataBindings Property
To use the DataBindings Collection to bind a control
to a data source, set the DataBinding property of the
control to the data source
Property of the control to
which data is bound
txtCustomerAddress.DataBindings.Add("Text",
dsNorthwindData1.Customers, "Address");
txtCustomerCity.DataBindings.Add("Text",
dsNorthwindData1.Customers, "City");
Table from the data source
Column in the table
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";
How to Maintain the Currency of a Control by Using
CurrencyManager
TextBox1
Currency Manager1
TextBox2
Data Source 1
Currency Manager2
Datagrid
Data Source 2
CurrencyManager cm;
cm = (CurrencyManager)this.BindingContext[pubsDataSet,
"Authors"];
cm.Position += 1;
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
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
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
What Is a DataView Object?
DataSet
DataTable
DataTable
Connection
DataView
Stored
procedure
Database
Windows and Web controls
Server
Data Store
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")
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
Demo: Sorting and Filtering data


Filter data with a Select method
Filter and sort data by using dataview
object
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
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
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
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
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
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
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.
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
Lesson: How to Handle Conflicts

What Conflicts Can Occur?

How to Detect Conflicts

How to Resolve Conflicts
What Conflicts Can Occur?

Disconnected applications use optimistic concurrency


Data conflicts can occur when you update the database


Releases database locks between data operations
Another application or service might have already
changed the data
Examples

Deleting a previously deleted row

Changing a previously changed column
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
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
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
Using Transactions

What Is a Transaction?

How to Manage Transactions Using SQL Statements

How to Manage Transactions Using ADO.NET

What Are Isolation Levels?
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
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
How to Manage Transactions Using ADO.NET

XxxConnection – for example, SqlConnection


BeginTransaction
XxxTransaction – for example, SqlTransaction

Commit

Rollback
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