日期:2014-05-18  浏览次数:20493 次

请教ASP.NET中的OleDbTransaction
由于我要多个地方经常对一张表进行多次更新操作,所以我把这更新操作封装起来,做成一个用户控件。

我想要多次调用更新方法,只要其中有一个更新出错时,所有的更新事务就回滚,否则一起执行,要怎么办?    
对OleDbTransaction不是很了解,希望能讲细点    
谢谢          
 
代码如:        
c_update.ascx        
public     bool     f_update(string     name,string     content)        
{        
try        
{        
cmd=conn.CreateCommand();     //conn未设置事务        
cmd.CommandText= "update     tablename     set     content=@content     where     name=@name ";        
cmd.Parameters.Add( "@content ",content);        
cmd.Parameters.Add( "@name ",name);        
cmd.ExecuteNonQuery();        
conn.Dispose();        
return     true;        
}        
catch        
{        
return     false;        
}        
}        
 
别处ASP.NET调用        
如update.aspx        
bool     l_return     =     true;        
if     (c_update.f_update( "name1 ", "1 ")==false)        
{        
l_return     =     false;        
}        
if     (c_update.f_update( "name2 ", "2 ")==false)        
{        
l_return     =     false;        
}        
if     (c_update.f_update( "name3 ", "3 ")==false)        
{        
l_return     =     false;        
}        
...(多个如此)        
 
我想要只有l_return=false时,所有的更新事务就回滚,否则一起执行,要怎么办?    
对OleDbTransaction不是很了解,希望能讲细点    
谢谢

------解决方案--------------------
在c_update.ascx共有1个OleDbTransaction,

然后在c_update.ascx提供3个方法,分别为开始事务、提交、回滚。

然后在update.aspx调用这3个方法
------解决方案--------------------
这些执行语句必须要写在同一个事务内部才行
http://blog.csdn.net/wszhoho/archive/2007/03/16/1530892.aspx
这里有两个语句的例子,应该能实现你的要求。
------解决方案--------------------
至少,你可以设计一个自定义类来封装你要工作,但不要去继承扩展 UserControl