事务处理与异常处理

<span style="color: #1c2efe;">事务处理</span>是由以一个单一的逻辑单位完成的一系列操作,它可以由一系列的SQL语句、SELECT、INSERT、UPDATE、DELETE组成,如果在该单位包含的操作执行完毕后没有发生错误,那么它对数据库所作的改变就是永久的了。如果一旦有错误发生,它就不会对数据库作任何修改或改变。

  要定义一个事务,需要使用Begin tran命令,在这一命令之后的任何语句都将被认为是事务的一部分。命令Commit用来完成事务,并使事务对数据库所作的修改成为永久的。Rollback命令用来取消一个事务,并还原事务对数据库所作的修改。

  下面是一个事务的例子:
<table cellspacing="0" width="100%" bgcolor="#FFFFFF">
<tbody>
<tr>
<td>[SQL SERVER7.0 or SQL SERVER2000]
 BEGIN TRAN
  INSERT INTO PRODUCT(PRODUCTID, PRODUCTNAME) VALUES("0001", "KEYBOARD")
  UPDATE PRODUCT SET PRICE=12 WHERE PRODUCTID= "0002"
  IF (@ERROR&gt;0)
   ROLLBACK
  ELSE
 COMMIT

<strong><span style="color: #ac0000;">异常处理

</span></strong>  开发一种错误消息处理机制、并向用户提供有用的、清楚、有意义的信息也是编程人员的任务之一,异常处理就是能够提供这一服务的一种机制。一旦事务失败,服务器就会向系统发出一个用于帮助用户发现并修复邦联的数据库错误信息。我们可以异常处理功能来获取这种异常信息,并修复出现的故障。异常处理功能的用法如下所示:

  [c#]
<table cellspacing="0" width="100%" bgcolor="#FFFFFF">
<tbody>
<tr>
<td>try
{
//数据库操作命令
}
catch (Exception e)
{
?//如果有异常发生,这部分语句将被执行
}
finally
{
?//无论是否有异常发生,这部分语句都会得到执行
}</td>
</tr>
</tbody>
</table>
1,<span style="color: #22b14c;">SqlServer存储过程的事务处理
</span>一种比较通用的出错处理的模式大概如下:
Create procdure prInsertProducts
(
@intProductId int,
@chvProductName varchar(30),
@intProductCount int
)
AS
Declare @intErrorCode int
Select @intErrorCode=@@Error
Begin transaction
if @intErrorCode=0
begin
-insert products
insert products(ProductID,ProductName,ProductCount)
s(@intProductId,@chvProductName,@intProductCount)
Select @intErrorCode=@@Error --每执行完一条t-sql语句马上进行检测,并把错误号保存到局部变量中
end
if @intErrorCode=0
begin
-update products
update products set ProductName='MicroComputer' where ProductID=5
Select @intErrorCode=@@Error
end
if @intErrorCode=0
commit transaction
else
rollback transaction
Return @intErrorCode --最好返回错误代号给调用的存储过程或应用程序
2<span style="color: #22b14c;">,.Net中使用事务处理
</span>SqlConnection myConnection = new SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;");
myConnection.Open();
SqlTransaction myTrans = myConnection***ginTransaction(); //使用New新生成一个事务
SqlCommand myCommand = new SqlCommand();
myCommand.Transaction = myTrans;
try
{
myCommand.CommandText = "Update Address set location='23 rain street' where userid='0001'";
myCommand.ExecuteNonQuery();
myTrans.Commit();
Console.WriteLine("Record is udated.");
}
catch(Exception e)
{
myTrans.Rollback();
Console.WriteLine(e.ToString());
Console.WriteLine("Sorry, Record can not be updated.");
}
finally
{
myConnection.Close();
}

参考网址:<a href="http://www.ej38.com/showinfo/asp.net-sql-130305.html">http://www.ej38.com/showinfo/asp.net-sql-130305.html</a>

<a href="http://www.yesky.com/11/215511.shtml">http://www.yesky.com/11/215511.shtml</a>

<span style="color: #9c5a3c;">之前看书和学习PHP的时候都有接触过事务这个概念,在那时虽然看到了它的定义解释,却不知道那是怎么一回事。毕竟IT技术性的名词不像文科中的理论一样看就可以理解的,需要实践。实践就是最好的理解事物的方法。</span>

<span style="color: #9c5a3c;">而这一次我在学习做投票系统的时候用到了事务处理,才开始明白了何为事务。其实感觉事务更像一个保险机制,在确保程序中所有步骤正确的前提下才执行任务。那反映到我们的生活也是一样的,那是一种认真负责的做事态度,这样会让我们少了许多风险,多了几分保障。</span></td>
</tr>
</tbody>
</table>

posted @ 2012-07-21 17:15  Joy Ho  阅读(290)  评论(0编辑  收藏  举报