示例#1
0
 /// <summary>
 /// 执行删除数据并处理相关数据一致性
 /// </summary>
 /// <param name="e">传入的带有数据的事件参数</param>
 /// <returns></returns>
 private bool DeleteData(ListViewDeleteEventArgs e)
 {
     //当前用户输入的id号
     Int64 id = Convert.ToInt64(e.Keys[0]);
     //数据适配器
     //当前数据库连接
     //当前更新语句对象
     using (var da = new t_product_record_etTableAdapter())
     using (var cmd = da.Adapter.DeleteCommand)
     using (var conn = cmd.Connection)
     {
         //打开数据库连接
         conn.Open();
         //开启事务
         using (var tran = conn.BeginTransaction())
         {
             //试运行
             try
             {
                 //设置事务
                 da.Transaction = tran;
                 //获取数据
                 using (var tab = da.GetDataById(id))
                 {
                     //检查是否获取到行
                     if (tab.Rows.Count == 0)
                     {
                         //显示失败
                         throw new Exception("当前生产记录已经被其他用户删除!");
                     }
                     else
                     {
                         //首行
                         var row = (DataSetProductRecord.t_product_record_etRow)tab.Rows[0];
                         //部门名称
                         string deptName = row.dept_name;
                         //下部门名称
                         string nextDeptName = row.next_dept_name;
                         //lot卡号
                         string lotId = row.lot_id;
                         //pnl出数
                         Int16 pnlQty = row.pnl_qty;
                         //pcs出数
                         int pcsQty = row.pcs_qty;
                         //检测是否超过下部门余数
                         if (ydOperateBalanceLotCrad.IsOutstripDeptBalance(
                             tran,
                             deptName,
                             nextDeptName,
                             lotId,
                             pnlQty,
                             pcsQty,
                             true
                         ))
                         {
                             return false;
                         }
                         //修改下部门lot卡余数
                         if (!ydOperateBalanceLotCrad.UpdateBalanceAfterInsert(
                             tran,
                             deptName,
                             nextDeptName,
                             lotId,
                             pnlQty,
                             pcsQty,
                             true 
                         ))
                         {
                             return false;
                         }
                         //目标数据库表名
                         string toTabName = "[t_dept_lot_card_balance]";
                         //添加到部门结存lot卡
                         if (!ydOperateBalanceLotCrad.InsertOneRecordToLotCardBalance(
                             tran,
                             ydOperateBalanceLotCrad.GetTabNameByDeptName(deptName),
                             deptName,
                             toTabName,
                             id
                         ))
                         {
                             return false;
                         }
                         //从生产记录删除数据
                         if (!ydOperateBalanceLotCrad.DeleteOneRecordFromProductOrScrapRecord(cmd, id))
                         {
                             return false;
                         }
                     }
                 }
                 //提交事务
                 tran.Commit();
                 //返回成功
                 return true;
             }
             catch (Exception ex)
             {
                 //回滚事务
                 tran.Rollback();
                 //非数字返回失败
                 throw new Exception(ex.Message);
             }
         }
     }
 }
示例#2
0
 /// <summary>
 /// 根据输入的参数值来执行更新数据
 /// </summary>
 /// <param name="e">传入的带有数据的事件参数</param>
 /// <returns></returns>
 private bool UpdateData(FormViewUpdateEventArgs e)
 {
     //检测是否更改了需要更新到其他部门的数据内容
     if (e.OldValues["lot_id"].Equals(e.NewValues["lot_id"]) &&
         e.OldValues["product_num"].Equals(e.NewValues["product_num"]) &&
         e.OldValues["pnl_qty"].Equals(e.NewValues["pnl_qty"]) &&
         e.OldValues["next_dept_name"].Equals(e.NewValues["next_dept_name"])
     )
     {
         //执行只更新本生产记录
         e.Cancel = false;
         //更新事件继续执行
         return false;
     }
     //数据适配器
     //当前添加语句对象
     //当前数据库连接
     using (var da = new t_product_record_etTableAdapter())
     using (var cmd = da.Adapter.UpdateCommand)
     using (var conn = cmd.Connection)
     {
         //打开数据库连接
         conn.Open();
         //开启事务
         using (var tran = conn.BeginTransaction())
         {
             //设置事务
             da.Transaction = tran;
             //试运行
             try
             {
                 //部门名称
                 string deptName = e.OldValues["dept_name"].ToString();
                 //当前行id号
                 Int64 id = Convert.ToInt64(e.Keys["id"]);
                 //获取数据
                 using (var tab = da.GetDataById(id))
                 {
                     //检查是否获取到行
                     if (tab.Rows.Count == 0)
                     {
                         //显示失败
                         throw new Exception("当前生产记录已经被其他用户删除!");
                     }
                     else
                     {
                         //首行
                         var row = (DataSetProductRecord.t_product_record_etRow)tab.Rows[0];
                         //下部门名称
                         string nextDeptName = row.next_dept_name;
                         //lot卡号
                         string lotId = row.lot_id;
                         //pnl出数
                         Int16 pnlQty = row.pnl_qty;
                         //pcs出数
                         int pcsQty = row.pcs_qty;
                         //检测是否超过下部门余数
                         if (ydOperateBalanceLotCrad.IsOutstripDeptBalance(
                             tran,
                             deptName,
                             nextDeptName,
                             lotId,
                             pnlQty,
                             pcsQty,
                             true
                         ))
                         {
                             return false;
                         }
                         //修改下部门lot卡余数
                         if (!ydOperateBalanceLotCrad.UpdateBalanceAfterInsert(
                             tran,
                             deptName,
                             nextDeptName,
                             lotId,
                             pnlQty,
                             pcsQty,
                             true
                         ))
                         {
                             return false;
                         }
                         //目标数据库表名
                         string toTabName = "[t_dept_lot_card_balance]";
                         //添加到部门结存lot卡
                         if (!ydOperateBalanceLotCrad.InsertOneRecordToLotCardBalance(
                             tran,
                             ydOperateBalanceLotCrad.GetTabNameByDeptName(deptName),
                             deptName,
                             toTabName,
                             id
                         ))
                         {
                             return false;
                         }
                     }
                 }
                 //部门名称
                 deptName = e.NewValues["dept_name"].ToString();
                 //保存一条记录到数据库
                 if (!ydOperateBalanceLotCrad.UpdateOneRecord(
                     cmd,
                     e,
                     string.Empty,
                     deptName
                 ))
                 {
                     //失败就直接返回
                     return false;
                 }
                 //提交事务
                 tran.Commit();
                 //返回成功
                 return true;
             }
             catch (Exception ex)
             {
                 //回滚事务
                 tran.Rollback();
                 //非数字返回失败
                 throw new Exception(ex.Message);
             }
         }
     }
 }