悲观观定SQL Server和Oracle
悲观观定SQL Server和Oracle /*
author:wuxiuxiang;
Email:imessage@126.com
*/
using System;
using System.Data;namespace com.cuc.wu.example{ public class class1 { //For SQL Server 需要与Connection相关的一个Transaction的隔离级别为//Repeatable Read或Serializable,对于Oracle,在Command中使用select for update即可
public void LockedSQLDataRow() { DataSet ds = new DataSet(); SqlConnection sconn = new SqlConnection('server=localhost;uid=sa;pwd=sa;database=pubs'); sconn.Open(); SqlTransaction tx = new sconn.BeginTransaction(IsolationLevel.Serializable); SqlCommand cmd = new SqlCommand('select * from authors',conn,tx); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds,'autors'); //rows locked here ds.Tables[0].Rows[1][2]='Free'; SqlCommandBuilder bld = new SqlCommandBuilder(da); da.Update(ds,'authors'); tx.commit(); //rows unlocked here da.Dispose(); conn.Close();//ÏÔʽÊÍ·Å×ÊÔ´ } public void LockedORADataRow() { DataSet ds = new DataSet(); OleDbConnection oconn = new OleDbConnection('provider=msdaora;data source=ocr11;user id=scott;password=tiger'); conn.Open(); OleDbTransaction tx = oconn.BeginTransaction(); OleDbCommand cmd = new OleDbCommand('select * form emp for update ',conn,tx); OleDbDataAdapter da = new OleDbDataAdapter(cmd); da.Fill(ds,'emp'); //rows locked here; ds.Tables[0].Rows[9][2] = 'CLERK'; OleDbCommandBuilder bld = new OleDbCommandBuilder(da); da.Update(ds,'emp'); tx.Commit(); //rows unlocked here da.Dispose(); oconn.Close(); } };}