当前位置:中国站长下载文章中心网页编程.NET编程 → ASP.NET中的事务处理和异常处理(2)

ASP.NET中的事务处理和异常处理(2)

减小字体 增大字体 作者:不详  来源:不详  发布时间:2006-8-14 9:04:42
    
    如何实现事务?
  
    1、在一个存储过程中编写事务语句,并使用下面的控制发现是否有错误发生,返回相应的值,互联网应用程序会根据返回的值显示正确的和容易理解的错误信息。下面是一个事务的例子:
  
  [Store Procedure]
  CREATE PROCEDURE PRODUCT_SAVE( AS
  DECLARE
  (@USERID CHAR(5),
  @LOCATION VARCHAR(50),
  @RETURNS INT OUTPUT
  )
  BEGIN TRAN
  UPDATE ADDRESS SET LOCATION=@LOCATION WHERE USERID=@USERID
  IF (@@ERROR>0)
  BEGIN
  @RETURNS=-1 /* Fail to Update */
  ROLLBACK
  END
  ELSE
  @RETURNS=0 /* Succeed to update */
  COMMIT
  
  RETURN @RETURNS
  
  
  [Web Application in C#]
  int values;
  DBClass dbc=new DBClass(); // 使用new命令生成一个数据库类
  values=dbc.updatedb("0001", "23 Rain Street"); //And call its function member to update record
  if (values==0)
  Lable_message.text= "Update successfully";
  else
  Lable_message.text= "Sorry, can not update this record, please contact your DBA."
  
    上面的例子非常适合DBA等对数据库编程非常熟悉的编程人员,他们更喜欢在存储过程中完成异常处理功能。如果对数据库编程不太熟悉,则可以采取下面的方法:
  
    2、在.net框架中,我们可以使用SqlTransaction类定义一个事务。此后,我们就可以使用commit或rollback函数控制事务。当然了,我们也可以使用.NET框架提供的异常处理功能获取系统异常。下面是一个有关的例子:
  
  [Web Applicaion in C#]
  SqlConnection myConnection = new SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;");
  myConnection.Open();
  
  SqlTransaction myTrans = myConnection.BeginTransaction(); //使用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();
  }
  
    需要注意的是,如果使用OleDb类而不是Sqlclient类来定义SQL命令和连接,我们就必须使用OleTransation来定义事务。
  
    做人要厚道,请注明转自chinazhan中国站长(www.ChinaZhan.com)。