2011-04-19 26 views
0

有沒有一種方法可以更好地優化此代碼,而不使用TransactionScope?在不使用分佈式事務的情況下優化此代碼

public static bool DeleteItem(int cusID) 
    { 
     int result = 0; 

     using (OleDbConnection myConnection = new OleDbConnection(AppConfiguration.ConnectionString)) 
     { 
      string delOrders= "DELETE FROM ORDERS WHERE cusID=?"; 
      string delCustomer= "DELETE FROM CUSTOMERS WHERE cusID=?"; 
      OleDbCommand myCommand = null; 
      OleDbTransaction tran = null; 

      try 
      { 
       myConnection.Open(); 
       tran=myConnection.BeginTransaction(); 


       using (myCommand = new OleDbCommand(delOrders, myConnection)) 
       { 
        myCommand.Parameters.Add("cusID", cusID); 
        myCommand.Transaction = tran; 
        myCommand.ExecuteNonQuery(); 
       } 

       using (myCommand = new OleDbCommand(delCompany, myConnection)) 
       { 
        myCommand.Parameters.Add("cusID", cusID); 
        myCommand.Transaction = tran; 
        myCommand.ExecuteNonQuery(); 
       } 
       tran.Commit(); 
       result = 1; 
      } 

      catch (OleDbException ex) 
      { 
       tran.Rollback(); 
       throw ex; 
      } 

      finally 
      { 
       myConnection.Close(); 
      } 
     } 
     return (result>0); 
    } 
+1

爲什麼?它出什麼問題了?它慢嗎? – Justin 2011-04-19 06:34:15

+1

FWD:[3參數形式](http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.oledbcommand%28v=VS.90%29.aspx)的OleDbCommand ctor允許指定交易。我也更喜歡'使用'。 – 2011-04-19 06:36:25

+0

感謝pst。我剛剛被要求優化這個代碼,你可以幫助我處理交易的使用塊嗎? – 2011-04-19 06:47:50

回答

3

爲什麼你想避免交易數據庫是否應該同時刪除記錄是一致的?在這裏刪除交易基本上有可能導致數據庫不一致的形式。

如果你只是想從代碼中刪除它,那麼可能你可能想嘗試單個存儲過程中的事務。下面是一些例子

http://www.codeproject.com/KB/database/sqlservertransactions.aspx

http://msdn.microsoft.com/en-us/library/ms188929.aspx

+0

我不想刪除交易。它只是我不想使用TransactionScope,因爲它出於某種原因不適用於DB2。我被要求用我想的一個明確的事務來優化代碼。 – 2011-04-19 06:51:31

+0

看看這些東西是否幫助你進一步http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/78c6f17c-c612-4aa7-82c0-34a8ad69c07c/ http://stackoverflow.com/questions/ 1403946/TransactionScope的,不會工作,與DB2的提供商 – 2011-04-19 07:05:44

1

只是一個提示 - 您可以使用bool result代替int result原因函數返回布爾反正。