TransactionsIsolationLevels
=====================

This app explores the ability of a command to read data from a particular database table when that data is involved in a pending transaction on another connection.  The app permits a selection of different IsolationLevel settings for the transaction so the effect of each can be examined.

The experiments listed below explore the behavior of two operations, each conducted within the jurisdiction of a separate transaction, that access records in the same table.  Note that the application permits you to conduct operation outside of transactions; but that option is simply included to increase the flexibility of what you can test with the app.  It is not exercised within the experiments listed.

It is suggested that you run the experiments listed below, in order, examining the code that each exercises as desired.

Experiment No. 1
------------------------
This experiment demonstrates that if the operation in transaction #1 is a read, then read operations in transaction #2 will be successful regardless of the isolation levels of either transaction.

Process #1 Settings
- - - - - - - - - - - - - - - - 
Select Operation to Perform on the Local DataSet
o Read Records
  Add Record
  Edit Current Record
  Delete Current Record

Select Operating Conditions
x Perform the indicated operation inside a Transaction
x Communicate DataSet updates to back-end database

Select IsolationLevel for Transaction
(select any)
 ReadCommitted
 ReadUncommitted
 RepeatableRead
 Serializable


Process #2 Settings
- - - - - - - - - - - - - - - - 
Select Operation to Perform on the Local DataSet
o Read Records
  Add Record
  Edit Current Record
  Delete Current Record

Select Operating Conditions
x Perform the indicated operation inside a Transaction
x Communicate DataSet updates to back-end database

Select IsolationLevel for Transaction
(select any)
 ReadCommitted
 ReadUncommitted
 RepeatableRead
 Serializable

Expected Result of Experiment No. 1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
The read operation in process #2 succeeds.

Experiment No.2
-----------------------
This experiment demonstrates that if the operation in transaction #1 is a write, then read operations in transaction #2 will be successful only when the isolation level of transaction #2 is ReadUncommitted

Process #1 Settings
- - - - - - - - - - - - - - - -
Select Operation to Perform on the Local DataSet
  Read Records
  Add Record
x Edit Current Record
  Delete Current Record

Select Operating Conditions
x Perform the indicated operation inside a Transaction
x Communicate DataSet updates to back-end database

Select IsolationLevel for Transaction
(any)
 ReadCommitted
 ReadUncommitted
 RepeatableRead
 Serializable


Process #2 Settings
- - - - - - - - - - - - - - - - 
Select Operation to Perform on the Local DataSet

x Read Records
  Add Record
  Edit Current Record
  Delete Current Record

Select Operating Conditions

x Perform the indicated operation inside a Transaction
x Communicate DataSet updates to back-end database

Select IsolationLevel for Transaction

First try ReadCommitted; then try the read operation again with any of the other IsolationLevel settings: ReadUncommitted, RepeatableRead, or Serializable.

Expected Result of Experiment No. 2
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
On the read operation performed with an isolation level of ReadUncommitted will succeed.