Zend framework Zend适配器事务回滚失败MSSQL

Zend framework Zend适配器事务回滚失败MSSQL,zend-framework,rollback,Zend Framework,Rollback,我有一个奇怪的错误,我使用MSSQL 2008 R2和ZendFw 1.12 首先。。回滚在try中没有失败 // Zend_DB_Table Adapter $adapter = Zend_Db_Table::getDefaultAdapter(); // Start Transaction $adapter->beginTransaction(); try { $adapter->rollBack(); r

我有一个奇怪的错误,我使用MSSQL 2008 R2和ZendFw 1.12

首先。。回滚在try中没有失败

   // Zend_DB_Table Adapter
   $adapter = Zend_Db_Table::getDefaultAdapter();

   // Start Transaction
   $adapter->beginTransaction();

   try {
          $adapter->rollBack();
          return (int) 1;
   } catch (Exception $e) {
          throw new Api_Exception($e->getMessage(), $e->getCode(), $e);
   }
但是。。回滚在catch内失败

是的,我故意在try-bellow上制造错误,使其进入捕捉区域

   // Zend_DB_Table Adapter
   $adapter = Zend_Db_Table::getDefaultAdapter();

   // Start Transaction
   $adapter->beginTransaction();

   try {
          return (int) A;
   } catch (Exception $e) {
          $adapter->rollBack();
          throw new Api_Exception($e->getMessage(), $e->getCode(), $e);
   }
它回来了。。Zend_Db_适配器_Sqlsrv_异常:在调用Sqlsrv_提交或Sqlsrv_回滚之前,必须通过调用Sqlsrv_开始_事务来启动事务

有什么线索吗?

嗨,去看看这个链接

您可以使用安全且简单的代码来运行100%运行所有查询行或不运行任何查询行

|query 1| = like insert into or select or ...
|count of lines| = number off query

DECLARE @rowcount int  set @rowcount = 0 ; 
BEGIN TRANSACTION [Tran1]
BEGIN TRY 
 <Query 1> ; set @rowcount = (@rowcount + @@ROWCOUNT); 
 <Query 2> ; set @rowcount = (@rowcount + @@ROWCOUNT); 
...
IF @rowcount =  <count of lines>
  COMMIT TRANSACTION[Tran1]
ELSE
  ROLLBACK TRANSACTION[Tran1]
END TRY
  BEGIN CATCH
  ROLLBACK TRANSACTION[Tran1]
END CATCH
DECLARE @rowcount int  set @rowcount = 0 ; 
BEGIN TRANSACTION [Tran1]
BEGIN TRY 
 insert into [database].[dbo].[tbl1] (fld1) values('1') ;
    set @rowcount = (@rowcount + @@ROWCOUNT); 
 insert into [database].[dbo].[tbl2] (fld1) values('2') ;
    set @rowcount = (@rowcount + @@ROWCOUNT); 

IF @rowcount =  2
  COMMIT TRANSACTION[Tran1]
ELSE
  ROLLBACK TRANSACTION[Tran1]
END TRY
  BEGIN CATCH
  ROLLBACK TRANSACTION[Tran1]
END CATCH