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();
}
};