最近做个东西要用到事务,写了半天发现加上的事务没有办点用途,根本没有起作用。请DX们看看!
一个类:
public int Update(DataTable dt,string strSql,SqlTransaction myTrans)
{
SqlDataAdapter sda = new SqlDataAdapter(strSql,this.conn);
//命令生成器
SqlCommandBuilder scb = new SqlCommandBuilder(sda);
sda.SelectCommand.Transaction = myTrans;
sda.InsertCommand = scb.GetInsertCommand();
sda.UpdateCommand = scb.GetUpdateCommand();
sda.DeleteCommand = scb.GetDeleteCommand();//使用事务
sda.DeleteCommand.Transaction = myTrans;
sda.UpdateCommand.Transaction = myTrans;
sda.InsertCommand.Transaction = myTrans;
int ra = sda.Update(dt);
// 接受所有的修改
dt.AcceptChanges();
}
另一个类
myTrans = conn.BeginTransaction(IsolationLevel.Serializable);
CDA.Update(dsUpdate.Tables[tables[i]],"select * from " + tables[i],myTrans);
...
myTrans.Commit()
结果我发现,我在还没有Commit的时候,数据就已经插入到数据库里了?各位大侠有什么办法?让他在Commit的时候一次提交?
一个类:
public int Update(DataTable dt,string strSql,SqlTransaction myTrans)
{
SqlDataAdapter sda = new SqlDataAdapter(strSql,this.conn);
//命令生成器
SqlCommandBuilder scb = new SqlCommandBuilder(sda);
sda.SelectCommand.Transaction = myTrans;
sda.InsertCommand = scb.GetInsertCommand();
sda.UpdateCommand = scb.GetUpdateCommand();
sda.DeleteCommand = scb.GetDeleteCommand();//使用事务
sda.DeleteCommand.Transaction = myTrans;
sda.UpdateCommand.Transaction = myTrans;
sda.InsertCommand.Transaction = myTrans;
int ra = sda.Update(dt);
// 接受所有的修改
dt.AcceptChanges();
}
另一个类
myTrans = conn.BeginTransaction(IsolationLevel.Serializable);
CDA.Update(dsUpdate.Tables[tables[i]],"select * from " + tables[i],myTrans);
...
myTrans.Commit()
结果我发现,我在还没有Commit的时候,数据就已经插入到数据库里了?各位大侠有什么办法?让他在Commit的时候一次提交?
解决方案 »
- WPF用2008开发好,还是2010开发好?
- C#读取文件指定列的数据,或者如何取得ArrayList中指定列的数据?
- 水文中水位的问题
- 有人用C#写过串口通信吗?
- public void control_TextChanged(object sender, EventArgs e)
- 请教一下两个ado连接字符串的不同.
- 我是新手,现在遇到一个问题,就是我想用一个windows 窗口程序去定时更新 存储在ASP.net工程中的全局变量中包含的数据集Application[“Da
- c#里的project可有右键编译成功,但按F5和运行快捷键都出错
- 高手help me!ASP.NET(C#)操作Oracle的Blob字段问题,请不要列举Sql Server,谢谢
- socket编程,客户端服务端都在一台机器上,数据走网卡吗
- 求助:视频文件实时传送的问题?
- 寻找 VB.net OpenGL的相关书籍或例程
根据你的不同需求取IsolationLevel不同的值。值:
Chaos
受 .NET Framework 精简版的支持。
无法改写隔离级别更高的事务中的挂起的更改。 16
ReadCommitted
受 .NET Framework 精简版的支持。
在正在读取数据时保持共享锁,以避免脏读,但是在事务结束之前可以更改数据,从而导致不可重复的读取或幻像数据。 4096
ReadUncommitted
受 .NET Framework 精简版的支持。
可以进行脏读,意思是说,不发布共享锁,也不接受独占锁。 256
RepeatableRead
受 .NET Framework 精简版的支持。
在查询中使用的所有数据上放置锁,以防止其他用户更新这些数据。防止不可重复的读取,但是仍可以有幻像行。 65536
Serializable
受 .NET Framework 精简版的支持。
在 DataSet 上放置范围锁,以防止在事务完成之前由其他用户更新行或向数据集中插入行。 1048576
Unspecified
受 .NET Framework 精简版的支持。
正在使用与指定隔离级别不同的隔离级别,但是无法确定该级别。 -1