2011-04-19 55 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原因函数返回布尔反正。