IsolationLevel and Mode Properties Example (VJ++)
This example uses the Mode property to open an exclusive connection, and the IsolationLevel property to open a transaction that is conducted in isolation of other transactions.
import com.ms.wfc.data.*;
import java.io.*;
public class IsolationLevelX
{
// The main entry point for the application.
public static void main (String[] args)
{
IsolationLevelX();
System.exit(0);
}
// IsolationLevelX Function
static void IsolationLevelX()
{
// Define ADO Objects
Connection cnn1 = null;
Recordset rstTitles = null;
// Assign connection string to variable
String strCnn = "Provider=sqloledb;Data Source=srv;"+
"Initial Catalog=Pubs;User Id=sa;Password=;";
// Declarations
BufferedReader in =
new BufferedReader ( new InputStreamReader(System.in));
String line = null;
try
{
// Open connection and Titles table
cnn1 = new Connection();
cnn1.setMode(AdoEnums.ConnectMode.SHAREEXCLUSIVE);
cnn1.setIsolationLevel(AdoEnums.IsolationLevel.ISOLATED);
cnn1.open(strCnn);
rstTitles = new Recordset();
rstTitles.setCursorType(AdoEnums.CursorType.DYNAMIC);
rstTitles.setLockType(AdoEnums.LockType.PESSIMISTIC);
rstTitles.open("Titles", cnn1, AdoEnums.CursorType.DYNAMIC,
AdoEnums.LockType.PESSIMISTIC);
cnn1.beginTrans();
// Display the connection mode
if (cnn1.getMode() == AdoEnums.ConnectMode.SHAREEXCLUSIVE)
System.out.println("\n\tConnection mode is exclusive");
else
System.out.println("\n\tConnection mode is not exclusive");
System.out.println("\nPress <Enter> to continue..");
in.readLine();
// Display the Isolation level
if ( cnn1.getIsolationLevel() == AdoEnums.IsolationLevel.ISOLATED)
System.out.println("\tTransaction is Isolated\n");
else
System.out.println("\tTransaction is not Isolated\n");
System.out.println("\nPress <Enter> to continue..");
in.readLine();
// Change the type of psychology titles
while(!rstTitles.getEOF())
{
if(rstTitles.getField("Type").getString().trim().
equals(new String("psychology")))
{
rstTitles.getField("Type").setString("self_help");
rstTitles.update();
}
rstTitles.moveNext();
}
// Print current data in recordset
rstTitles.requery();
while(!rstTitles.getEOF())
{
System.out.println(rstTitles.getField("Title").getString() +
" - " + rstTitles.getField("Type").getString() );
rstTitles.moveNext();
}
System.out.println("\nPress <Enter> to continue..");
in.readLine();
// Restore original data
cnn1.rollbackTrans();
// Cleanup objects before exit
rstTitles.close();
cnn1.close();
}
catch(AdoException ae)
{
// Notify the user of any errors that result from ADO
// As passing a connection, check for null pointer first
if(cnn1 !=null)
{
PrintProviderError(cnn1);
}
else
{
System.out.println("Exception:" + ae.getLocalizedMessage());
}
}
// System Read requires this catch
catch(java.io.IOException je)
{
PrintIOError(je);
}
}
// PrintProviderError Function
static void PrintProviderError( Connection Cnn1 )
{
// Print Provider errors from Connection object.
// ErrItem is an item object in the Connection’s Errors collection.
com.ms.wfc.data.Error ErrItem = null;
long nCount = 0;
int i = 0;
nCount = Cnn1.getErrors().getCount();
// If there are any errors in the collection, print them.
if( nCount > 0);
{
// Collection ranges from 0 to nCount - 1
for (i = 0; i< nCount; i++)
{
ErrItem = Cnn1.getErrors().getItem(i);
System.out.println("\t Error number: " + ErrItem.getNumber()
+ "\t" + ErrItem.getDescription() );
}
}
}
// PrintIOError Function
static void PrintIOError( java.io.IOException je)
{
System.out.println("Error \n");
System.out.println("\tSource = " + je.getClass() + "\n");
System.out.println("\tDescription = " + je.getMessage() + "\n");
}
}