要求如下:现同时向二台服务器传送数据,如其中一条数据出错那么另一条数据将取消传送。如一条数据成功,一条出错,则成功的一条要删除。
二条数据之间不分先分。想问问大家的思路是什么,该怎样才能实现。小弟不盛感谢。
有没有这方面的可能性呢?

解决方案 »

  1.   

    [转载]ASP.NET中的事务处理和异常处理(也许这篇文章有帮助)
    2002-01-25· ·刘彦青编译··yesky使用SQL-Transaction类和.NET提供的异常处理机制,我们就能够以一种可靠的方式处理数据库运行中的问题和发现系统异常。这篇小文章将解释事务处理和异常处理的概念和用法。  什么是事务?  事务处理是由以一个单一的逻辑单位完成的一系列操作,它可以由一系列的SQL语句、SELECT、INSERT、UPDATE、DELETE组成,如果在该单位包含的操作执行完毕后没有发生错误,那么它对数据库所作的改变就是永久的了。如果一旦有错误发生,它就不会对数据库作任何修改或改变。  要定义一个事务,需要使用Begin tran命令,在这一命令之后的任何语句都将被认为是事务的一部分。命令Commit用来完成事务,并使事务对数据库所作的修改成为永久的。Rollback命令用来取消一个事务,并还原事务对数据库所作的修改。  下面是一个事务的例子:[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>0) 
       ROLLBACK
      ELSE
     COMMIT    什么是异常处理?  开发一种错误消息处理机制、并向用户提供有用的、清楚、有意义的信息也是编程人员的任务之一,异常处理就是能够提供这一服务的一种机制。一旦事务失败,服务器就会向系统发出一个用于帮助用户发现并修复邦联的数据库错误信息。我们可以异常处理功能来获取这种异常信息,并修复出现的故障。异常处理功能的用法如下所示:  [c#]try
    {
    //数据库操作命令
    }
    catch (Exception e)
    {
    ?//如果有异常发生,这部分语句将被执行
    }
    finally
    {
    ?//无论是否有异常发生,这部分语句都会得到执行

    如何实现事务?  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 */
    COMMITRETURN @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来定义事务。
      

  2.   

    友情顶贴
    友情链接,哈哈
    http://community.csdn.net/Expert/topic/4076/4076672.xml?temp=.6320917
      

  3.   

    把数据库操作做成事务的 然后A 和 B全成功了 全commit 否则全rollback
      

  4.   

    http://www.yesky.com/20030402/1660720.shtml
      

  5.   

    http://www.yesky.com/20030402/1660720.shtml
      

  6.   

    两个数据库的更新,恐怕不能放在一个事务里面
    你应当写两个事务,分别更新,但都不提交(COMMIT),然后判断是否正确写入,如果是,则提交,如果有一个错误,则都回滚.
      

  7.   

    ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconprocessingtransactions.htm
    看看com+事务吧,一两句讲不清
      

  8.   

    如果你需要比较复杂但是功能灵活的,查看 System.Messaging。如果仅限于SQL Server管理的多个数据库,查看“分布式事务”。
    用两个事务共同Commit共同Rollback是做不到分布式事务管理的。当前一个事物Commit之后,如果后一个事务的Commit失败,必须再次回滚前一个已经看似完成事务。可见简单地想法不可行。分布式事务与单数据库事务的最大特点就是:两阶段提交。
      

  9.   

    System.Messaging 与整个分布式应用程序有关,事务是针对应用程序而言的,当然数据库事务也是一种简单的应用程序事务。如果你觉得这个命名空间的东西太多,就看看 System.Messaging.MessageQueueTransaction。不过我要忠告你这个比较复杂,需要较多开发时间。