无需使用分布式事务即可优化此代码

时间:2011-04-19 06:30:20

标签: c# asp.net

有没有一种方法可以更好地优化此代码,而不使用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);
    }

2 个答案:

答案 0 :(得分:3)

如果数据库在删除记录时应该保持一致,为什么还要避免使用事务?在这里删除事务基本上有可能使数据库处于不一致的形式。

如果您只是想从代码中删除它,那么您可能想要在单个存储过程中尝试事务。以下是一些例子

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

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

答案 1 :(得分:1)

只是提示 - 您可以使用bool result代替int result因为函数无论如何返回bool。