ADO.NET中如何锁定数据库的一个表~? 用Connection.BeginTransaction(IsolationLevel)来实现 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 IsolationLevel 枚举类型:[Chaos]受 .NET Framework 精简版的支持。 无法改写隔离级别更高的事务中的挂起的更改。 [ReadCommitted] 受 .NET Framework 精简版的支持。 在正在读取数据时保持共享锁,以避免脏读,但是在事务结束之前可以更改数据,从而导致不可重复的读取或幻像数据。 4096 [ReadUncommitted] 受 .NET Framework 精简版的支持。 可以进行脏读,意思是说,不发布共享锁,也不接受独占锁。[RepeatableRead] 受 .NET Framework 精简版的支持。 在查询中使用的所有数据上放置锁,以防止其他用户更新这些数据。防止不可重复的读取,但是仍可以有幻像行。[Serializable] 受 .NET Framework 精简版的支持。 在 DataSet 上放置范围锁,以防止在事务完成之前由其他用户更新行或向数据集中插入行。 [Unspecified] 受 .NET Framework 精简版的支持。 正在使用与指定隔离级别不同的隔离级别,但是无法确定该级别。 ----0-----0-----高举学习的旗帜学习 在事务中对表使用with (TABLOCKX)锁定表----------------SqlTransaction cmicTr=tempCn.BeginTransaction();//开始事务 try { SqlDataAdapter cmicDa=new SqlDataAdapter("select * from MetalMemberBasic " + " where State=0",tempCn); //where state='0'作用是取出记录数为零的 DataTable cmicDt=new DataTable(); cmicDa.SelectCommand.Transaction=cmicTr; cmicDa.Fill(cmicDt); DataRow cmicDr=cmicDt.NewRow(); SqlCommand cmicCmd=new SqlCommand("select max(MaxMemberID)" +" from MetalMaxID with (TABLOCKX)",tempCn);//锁定表取最大值 cmicCmd.Transaction=cmicTr; int maxID = Convert.ToInt16((cmicCmd.ExecuteScalar() == DBNull.Value)?0:cmicCmd.ExecuteScalar()); tempID=++maxID;//获取会员最大流水号 cmicCmd=new SqlCommand("Update MetalMaxID set " + "MaxMemberID=@MaxMemberID",tempCn); cmicCmd.Parameters.Add(new SqlParameter("@MaxMemberID",SqlDbType.Int)); cmicCmd.Parameters[0].Value=maxID; cmicCmd.Transaction=cmicTr; cmicCmd.ExecuteNonQuery(); cmicDr[0]=maxID; cmicDr[1]=tempName; cmicDr[2]=tempAcronym; cmicDr[3]=tempAdress; cmicDr[4]=tempPostCode; cmicDr[5]=tempRelation; cmicDr[6]=tempTelephoneArea; cmicDr[7]=tempTelephone; cmicDr[8]=tempFax; cmicDr[9]=tempMobile; cmicDr[10]=tempBusinessAdress; cmicDr[11]=tempBusinessID; cmicDr[12]=tempMemberDate; cmicDr[13]=tempPersonID; cmicDr[14]=tempState; cmicDr[15]=tempNote; cmicDr[16]=tempUpDateTime; cmicDr[17]=tempOperator; cmicDt.Rows.Add(cmicDr); //更新数据库数据 SqlCommandBuilder cmicCb=new SqlCommandBuilder(cmicDa); cmicDa.Update(cmicDt); //卸载资源 cmicCmd.Dispose(); cmicCb.Dispose(); cmicDt.Dispose(); cmicDa.Dispose(); } catch(Exception ex) { tempErrorMessage=ex.Message; cmicTr.Rollback(); return false; } cmicTr.Commit(); 刚才看到C#的短网址算法,哪位能改成Java版本的 求助!DateTime.Compare放在定时器里怎么不好使啊? 数据库中求平均数 多重接口问题 请问有类似InputBox 这样的输入提示框吗? 谁有考勤系统的统计计算 骰子游戏 Winform树形菜绑定 如何获得鼠标所在屏幕点的像素? 关于一个汉字库的问题! DataGrid1_EditCommand的问题 各位大侠,谁知道如何获取网卡的mac地址的C#程序,谢谢,谢谢
[Chaos]受 .NET Framework 精简版的支持。 无法改写隔离级别更高的事务中的挂起的更改。
[ReadCommitted] 受 .NET Framework 精简版的支持。 在正在读取数据时保持共享锁,以避免脏读,但是在事务结束之前可以更改数据,从而导致不可重复的读取或幻像数据。 4096
[ReadUncommitted] 受 .NET Framework 精简版的支持。 可以进行脏读,意思是说,不发布共享锁,也不接受独占锁。
[RepeatableRead] 受 .NET Framework 精简版的支持。 在查询中使用的所有数据上放置锁,以防止其他用户更新这些数据。防止不可重复的读取,但是仍可以有幻像行。
[Serializable] 受 .NET Framework 精简版的支持。 在 DataSet 上放置范围锁,以防止在事务完成之前由其他用户更新行或向数据集中插入行。
[Unspecified] 受 .NET Framework 精简版的支持。 正在使用与指定隔离级别不同的隔离级别,但是无法确定该级别。 ----0-----0-----
高举学习的旗帜学习
----------------
SqlTransaction cmicTr=tempCn.BeginTransaction();//开始事务
try
{
SqlDataAdapter cmicDa=new SqlDataAdapter("select * from MetalMemberBasic " +
" where State=0",tempCn);
//where state='0'作用是取出记录数为零的
DataTable cmicDt=new DataTable();
cmicDa.SelectCommand.Transaction=cmicTr;
cmicDa.Fill(cmicDt); DataRow cmicDr=cmicDt.NewRow();
SqlCommand cmicCmd=new SqlCommand("select max(MaxMemberID)"
+" from MetalMaxID with (TABLOCKX)",tempCn);//锁定表取最大值
cmicCmd.Transaction=cmicTr;
int maxID = Convert.ToInt16((cmicCmd.ExecuteScalar() == DBNull.Value)?0:cmicCmd.ExecuteScalar());
tempID=++maxID;//获取会员最大流水号
cmicCmd=new SqlCommand("Update MetalMaxID set " +
"MaxMemberID=@MaxMemberID",tempCn);
cmicCmd.Parameters.Add(new SqlParameter("@MaxMemberID",SqlDbType.Int));
cmicCmd.Parameters[0].Value=maxID;
cmicCmd.Transaction=cmicTr;
cmicCmd.ExecuteNonQuery(); cmicDr[0]=maxID;
cmicDr[1]=tempName;
cmicDr[2]=tempAcronym;
cmicDr[3]=tempAdress;
cmicDr[4]=tempPostCode;
cmicDr[5]=tempRelation;
cmicDr[6]=tempTelephoneArea;
cmicDr[7]=tempTelephone;
cmicDr[8]=tempFax;
cmicDr[9]=tempMobile;
cmicDr[10]=tempBusinessAdress;
cmicDr[11]=tempBusinessID;
cmicDr[12]=tempMemberDate;
cmicDr[13]=tempPersonID;
cmicDr[14]=tempState;
cmicDr[15]=tempNote;
cmicDr[16]=tempUpDateTime;
cmicDr[17]=tempOperator;
cmicDt.Rows.Add(cmicDr);
//更新数据库数据
SqlCommandBuilder cmicCb=new SqlCommandBuilder(cmicDa);
cmicDa.Update(cmicDt);
//卸载资源
cmicCmd.Dispose();
cmicCb.Dispose();
cmicDt.Dispose();
cmicDa.Dispose();
}
catch(Exception ex)
{
tempErrorMessage=ex.Message;
cmicTr.Rollback();
return false;
}
cmicTr.Commit();