很多时候我想大家应该都会用到关联删除数据的功能,比如A表的ClassID跟B表是关联的,使用存储过程进行删除的时候,理说当然的就需要判断前面的那条记录有没有被成功删除,然后在执行下一条记录的删除,修改操作的也是类似的,简单点说,就是好几条Sql语句,需要一起执行的时候,而且每条都必须保证是成功执行的时候,才会用到事务日志。

      C#里面也有事务日志这个概念,假如在程序的下面执行有错误的时候,会自动将数据回滚到以前的状态,即不做修改删除的操作,以下为C#下面代码,大家请看:
Conn.Open();
SqlTransaction Transaction = Conn.BeginTransaction();
SqlCommand  Command = Conn.CreateCommand();
Command.Connection = Conn;
Command.Transaction = Transaction;       
try
{
Sql语句一;
Sql语句二;
Transaction.Commit();//执行修改删除操作
catch
 {
Transaction.Rollback();//执行回滚操作
}
想想也真是奇怪,最近对C#的服务器控件,有种深恶痛觉的感觉,在做的这个样子,到现在为止,好像一个服务器段的控件都没有用,验证输入是否符合规则是自己写的Js代码,感觉这样的HTML代码看上去会简洁很多,所有的数据库操作全部采用存储过程,不知道后期数据量大的时候会不会由此导致严重的性能问题,这里不得不说的是Sql也有个事务日志功能,以下是我的存储过程代码,采用了事务日志的:
CREATE PROCEDURE FM_AdminEdit
(
 @CollegeID INT,
 @CollegeName NVarChar(50),
 @UserName NVarChar(50),
 @UserPass NVarChar(50),
 @TrueName NVarChar(50),
 @UserTel NVarChar(50)
)
 AS
Begin
BEGIN TRANSACTION

 UPDATE FM_College Set CollegeName=@CollegeName Where ID=@CollegeID
 UPDATE FM_Admin Set UserName=@UserName,UserPass=@UserPass,TrueName=@TrueName,UserTel=@UserTel Where CollegeID=@CollegeID

IF @@Error=0
 COMMIT TRANSACTION
Else
 ROLLBACK TRANSACTION

End
GO
代码的精华主要是在后面的这个地方,获得@Error的状态,然后判断是该执行更新操作还是应该执行回滚的操作,感觉Sql的存储过程的事务回滚功能可能更加的好,因为反正都是已经用了存储过程了,那干嘛不再多用一点,嘿嘿,人心那,本来就是这么的不自足的。当然,假如你是Sql语句的,没有用到存储过程,或者是Access的,根本就没有办法采用存储,那就只能用C#的那个Command的事务日志的,那个也是比较不错的。