public static void NonrepeatableReadFirstThread(String connStrig, IsolationLevel level) { Console.WriteLine("Begin the NonrepeatableReadFirstThread....."); using (SqlConnection conn = new SqlConnection(connStrig)) { String cmdText = @"Use DbDataIsolationLevel; Select ProductId,ProductName,Quantity,Price from dbo.Products where ProductId=1 WaitFor Delay '00:00:06'; Select ProductId,ProductName,Quantity,Price from dbo.Products where ProductId=1"; conn.Open(); using (SqlTransaction tran = conn.BeginTransaction(level, "NonrepeatableReadFirst")) { using (SqlCommand command = new SqlCommand(cmdText, conn)) { command.Transaction = tran; using (SqlDataReader reader = command.ExecuteReader()) { Boolean isFirstReader = true; do { Console.WriteLine("It's the result of {0} read:", isFirstReader ? "first" : "second"); TransactionIsolationLevels.DisplayData(reader); isFirstReader = !isFirstReader; } while (reader.NextResult() && !isFirstReader); } } tran.Commit(); } } Console.WriteLine("Exit from the NonrepeatableReadFirstThread....."); }
internal static void Main(string[] args) { String connString = "Data Source=(local);Initial Catalog=master;Integrated Security=True;Asynchronous Processing=true;"; OperateDatabase.CreateDatabase(connString); Console.WriteLine(); Console.WriteLine("Demonstrate the ReadUncommitted transaction: "); TransactionIsolationLevels.DemonstrateIsolationLevel(connString, System.Data.IsolationLevel.ReadUncommitted); Console.WriteLine("-----------------------------------------------"); Console.WriteLine("Demonstrate the ReadCommitted transaction: "); TransactionIsolationLevels.DemonstrateIsolationLevel(connString, System.Data.IsolationLevel.ReadCommitted); Console.WriteLine("-----------------------------------------------"); Console.WriteLine("Demonstrate the RepeatableRead transaction: "); TransactionIsolationLevels.DemonstrateIsolationLevel(connString, System.Data.IsolationLevel.RepeatableRead); Console.WriteLine("-----------------------------------------------"); Console.WriteLine("Demonstrate the Serializable transaction: "); TransactionIsolationLevels.DemonstrateIsolationLevel(connString, System.Data.IsolationLevel.Serializable); Console.WriteLine("-----------------------------------------------"); Console.WriteLine("Demonstrate the Snapshot transaction: "); OperateDatabase.SetSnapshot(connString, true); TransactionIsolationLevels.DemonstrateIsolationLevel(connString, System.Data.IsolationLevel.Snapshot); Console.WriteLine("-----------------------------------------------"); Console.WriteLine("Demonstrate the difference between the Snapshot and Serializable transactions:"); TransactionIsolationLevels.DemonstrateBetweenSnapshotAndSerializable(connString); OperateDatabase.SetSnapshot(connString, false); Console.WriteLine(); }