SQL 事务 有时执行不对,也没有报错

我也很疑惑,有时 执行成功 有时失败,而且不报错。 OPERATIONFLAG 和WORKNO 都是NVarchar ID number 类型
List sqlList = new List();
sqlList.Add("update ASN_ORDER_HEADS set OPERATIONFLAG = '' where OPERATIONFLAG in (select WORKNO from ORDERS_REFORM_HEADS where ID = '" + OrderId + "') ");//大多情况执行成功
sqlList.Add("update SO_ORDER_HEADS set OPERATIONFLAG = '' where OPERATIONFLAG in (select WORKNO from ORDERS_REFORM_HEADS where ID = '" + OrderId + "') ");//大多情况执行成功
sqlList.Add("delete from ORDERS_REFORM_DETAILS where ORDERS_REFORM_HEADID = '" + OrderId + "'");//这条每次 都执行成功

                            /// <summary>
    /// 执行多条SQL语句,实现数据库事务。
    /// </summary>
    /// <param name="SQLStringList">多条SQL语句</param>     
    public static int ExecuteSqlTran(System.Collections.Generic.List<String> SQLStringList)
    {
        int ret = 0;
        using (SqlConnection p_Conn = new SqlConnection(CONN_STRING_NON_DTC))
        {
            p_Conn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = p_Conn;
            SqlTransaction tx = p_Conn.BeginTransaction();
            cmd.Transaction = tx;
            try
            {
                foreach (string sql in SQLStringList)
                {
                    if (!String.IsNullOrEmpty(sql))
                    {
                        cmd.CommandText = sql;
                        ret += cmd.ExecuteNonQuery();
                    }
                }
                tx.Commit();
            }
            catch (Exception E)
            {
                tx.Rollback();
                //throw new Exception(E.Message);
                ret = 0;
            }
            finally
            {
                if (p_Conn.State != ConnectionState.Closed)
                {
                    p_Conn.Close();
                }
            }
            return ret;
        }
    }

程序运行过程中处于锁的状态,直到程序结束后,释放事务,数据不会被更新

这是sql语句执行的时候发现条件不符合,回滚了吧

可能是这条语句 引起的 where OPERATIONFLAG in (select WORKNO from ORDERS_REFORM_HEADS where ID = '" + OrderId + "') ,其他事务里都是给的固定ID,
就没有问题,如weixin_42381052所说,可能是orcle 认为是相同的记录,锁住了,第二条 select 语句 读取到空数据,导致没有更新。