IDbTransaction C#在多种方法

时间:2017-12-13 22:10:49

标签: c# asp.net oracle transactions webmethod

我目前正在使用IDbTransaction,而我似乎无法使用它我收到了无效的引用错误,我确定我错了,所以我该如何处理使用IDbTransaction?

BL:

ShippingSalesDAL optDAL = new ShippingSalesDAL(Engine.BO.C.CONNSTRING_TXN);
        public object CreateMaster(int in_num_dimensions_id, string in_date_ship_date, int in_num_shipment_type_id, int in_num_wh_id, int in_num_rampa_id, string in_str_username, int in_num_carrierID, int in_num_bulding_id)
        {
            using (optDAL)
            {
                optDAL.BeginTransaction();
                try
                {
                    int masterDOid = optDAL.CreateMasterDo(in_num_dimensions_id, in_date_ship_date, in_num_shipment_type_id, in_num_wh_id, in_num_rampa_id, in_str_username, in_num_carrierID, in_num_bulding_id);
                    return masterDOid;
                }
                catch (Exception ex)
                {
                    optDAL.RollBackTransaction();
                    return new { message = ex.Message };
                }
            }
        }
        public object Create_DO(int in_num_master_do_id, int in_num_do_destinos_id, int in_num_sales_type_id, string in_str_comments, string in_date_load_date, string in_date_sta_date, string in_str_shipping_plan, int in_num_priority, string in_str_username, string in_str_proNumber, string in_date_req_date)
        {
            using (optDAL)
            {
                try {
                    int DOid = optDAL.CreateDo(in_num_master_do_id, in_num_do_destinos_id, in_num_sales_type_id, in_str_comments, in_date_load_date, in_date_sta_date, in_str_shipping_plan, in_num_priority, in_str_username, in_str_proNumber, in_date_req_date);
                    return DOid;
                }
                catch (Exception ex)
                {
                    optDAL.RollBackTransaction();
                    return new { message = ex.Message };
                }
            }
        }
        public object Create_Detail(int in_num_do_id, int in_num_req_qty, int in_num_org_id, int in_num_weight, int in_num_parts_weight, string in_str_username, string in_str_part_number)
        {
            using (optDAL)
            {
                try {
                    int DetailID = optDAL.CreateDetailDo(in_num_do_id, in_num_req_qty, in_num_org_id, in_num_weight, in_num_parts_weight, in_str_username, in_str_part_number);
                    return DetailID;
                }
                catch (Exception ex)
                {
                    optDAL.RollBackTransaction();
                    return new { message = ex.Message };
                }
            }
        }

DAL:

internal int CreateMasterDo(int in_num_dimensions_id,
                                   string in_date_ship_date,
                                   int in_num_shipment_type_id,
                                   int in_num_wh_id,
                                   int in_num_rampa_id,
                                   string in_str_username,
                                   int in_num_carrierID,
                                   int in_num_bulding_id)
        {
            string sSp = SQL.create_master_do;
            using (var cmd = CreateStoredProcCommand(sSp, this.conn, this.txn))
            {
                cmd.Parameters.Add(CreateParameter("in_num_dimensions_id", in_num_dimensions_id));
                cmd.Parameters.Add(CreateParameter("in_date_ship_date", in_date_ship_date));
                cmd.Parameters.Add(CreateParameter("in_num_shipment_type_id", in_num_shipment_type_id));
                cmd.Parameters.Add(CreateParameter("in_num_wh_id", validate.getNullFromInt(in_num_wh_id)));
                cmd.Parameters.Add(CreateParameter("in_num_rampa_id", validate.getNullFromInt(in_num_rampa_id)));
                cmd.Parameters.Add(CreateParameter("in_str_username", in_str_username));
                cmd.Parameters.Add(CreateParameter("in_num_carrierID", validate.getNullFromInt(in_num_carrierID)));
                cmd.Parameters.Add(CreateParameter("in_num_bulding_id", validate.getNullFromInt(in_num_bulding_id)));
IDataParameter pResult = CreateParameterOut("out_num_master_do_id", DbType.Int32, 1000);
                IDataParameter pResult2 = CreateParameterOut("out_str_result", DbType.String, 1000);
                cmd.Parameters.Add(pResult);
                cmd.Parameters.Add(pResult2);
                cmd.ExecuteNonQuery();
                String sResult = validate.getDefaultIfDBNull(pResult.Value, TypeCode.Int32).ToString();
                String sResult2 = validate.getDefaultIfDBNull(pResult2.Value, TypeCode.String).ToString();
                if (sResult2 != C.OK) throw new DataBaseException(sResult2);
                return Int32.Parse(sResult);
            }
        }
internal int CreateDetailDo(int in_num_do_id, int in_num_req_qty, int in_num_org_id, decimal in_num_weight, decimal in_num_parts_weight, string in_str_username, string in_str_part_number)
        {
            string sSp = SQL.create_detail_do;
            using (var cmd = CreateStoredProcCommand(sSp, this.conn, this.txn))
            {
                cmd.Parameters.Add(CreateParameter("in_num_do_id", in_num_do_id));
                cmd.Parameters.Add(CreateParameter("in_num_req_qty", in_num_req_qty));
                cmd.Parameters.Add(CreateParameter("in_num_org_id", in_num_org_id));
                cmd.Parameters.Add(CreateParameter("in_num_weight", in_num_weight));
                cmd.Parameters.Add(CreateParameter("in_num_parts_weight", in_num_parts_weight));
                cmd.Parameters.Add(CreateParameter("in_str_username", in_str_username));
                cmd.Parameters.Add(CreateParameter("in_str_part_number", in_str_part_number));
                IDataParameter pResult = CreateParameterOut("out_num_do_detail_id", DbType.Int32, 1000);
                IDataParameter pResult2 = CreateParameterOut("out_str_result", DbType.String, 1000);
                cmd.Parameters.Add(pResult);
                cmd.Parameters.Add(pResult2);
                cmd.ExecuteNonQuery();
                String sResult = validate.getDefaultIfDBNull(pResult.Value, TypeCode.Int32).ToString();
                String sResult2 = validate.getDefaultIfDBNull(pResult2.Value, TypeCode.String).ToString();
                if (sResult2 != C.OK) throw new DataBaseException(sResult);
                return Int32.Parse(sResult);
            }
        }
        internal int CreateDo(int in_num_master_do_id, int in_num_do_destinos_id, int in_num_sales_type_id, string in_str_comments, string in_date_load_date, string in_date_sta_date, string in_str_shipping_plan, int in_num_priority, string in_str_username, string in_str_proNumber, string in_date_req_date)
        {
            string sSp = SQL.create_do;
            using (var cmd = CreateStoredProcCommand(sSp, this.conn, this.txn))
            {
                cmd.Parameters.Add(CreateParameter("in_num_master_do_id", in_num_master_do_id));
                cmd.Parameters.Add(CreateParameter("in_num_do_destinos_id", in_num_do_destinos_id));
                cmd.Parameters.Add(CreateParameter("in_num_sales_type_id", in_num_sales_type_id));
                cmd.Parameters.Add(CreateParameter("in_str_comments", in_str_comments));
                cmd.Parameters.Add(CreateParameter("in_date_load_date", in_date_load_date));
                cmd.Parameters.Add(CreateParameter("in_date_sta_date", in_date_sta_date));
                cmd.Parameters.Add(CreateParameter("in_str_shipping_plan", in_str_shipping_plan));
                cmd.Parameters.Add(CreateParameter("in_num_priority", validate.getNullFromInt(in_num_priority)));
                cmd.Parameters.Add(CreateParameter("in_str_username", in_str_username));
                cmd.Parameters.Add(CreateParameter("in_str_proNumber", in_str_proNumber));
                cmd.Parameters.Add(CreateParameter("in_date_req_date", in_date_req_date));
                IDataParameter pResult = CreateParameterOut("out_num_do_id", DbType.Int32, 1000);
                IDataParameter pResult2 = CreateParameterOut("out_str_result", DbType.String, 1000);
                cmd.Parameters.Add(pResult);
                cmd.Parameters.Add(pResult2);
                cmd.ExecuteNonQuery();
                String sResult = validate.getDefaultIfDBNull(pResult.Value, TypeCode.Int32).ToString();
                String sResult2 = validate.getDefaultIfDBNull(pResult2.Value, TypeCode.String).ToString();
                if (sResult2 != C.OK) throw new DataBaseException(sResult);
                return Int32.Parse(sResult);
            }
        }
    }

CreateDO.aspx.cs

[WebMethod]
        public static string CreateMaster(int dimensions, string shipDate, int shipType, int warehouse, int ramp, int carrier, int building)
        {
            var oUser = (FBC.BO.User)HttpContext.Current.Session[Engine.BO.C.USER];
            DateTime date_ship_date = DateTime.ParseExact(shipDate, "dd-MM-yyyy", null);
            string shipDatefmt = date_ship_date.Date.ToString("yyyy-MM-dd");
            ShippingSalesBL bl = new ShippingSalesBL();
            return JsonConvert.SerializeObject(bl.CreateMaster(dimensions, shipDatefmt, shipType, warehouse, ramp, oUser.UserName, carrier, building));
        }
        [WebMethod]
        public static string Create_DO(int in_num_master_do_id, int in_num_do_destinos_id, int in_num_sales_type_id, string in_str_comments, string in_date_load_date, string in_date_sta_date, string in_str_shipping_plan, int in_num_priority, string in_str_proNumber, string in_date_req_date)
        {
            var oUser = (FBC.BO.User)HttpContext.Current.Session[Engine.BO.C.USER];
            in_str_proNumber = null;
            DateTime loadDate = DateTime.ParseExact(in_date_load_date, "dd-MM-yyyy", null);
            string loadDatefrmt = loadDate.Date.ToString("yyyy-MM-dd");
            DateTime staDate = DateTime.ParseExact(in_date_load_date, "dd-MM-yyyy", null);
            string staDatefrmt = staDate.Date.ToString("yyyy-MM-dd");
            DateTime reqDate = DateTime.ParseExact(in_date_load_date, "dd-MM-yyyy", null);
            string reqDatefrmt = reqDate.Date.ToString("yyyy-MM-dd");
            ShippingSalesBL bl = new ShippingSalesBL();
            return JsonConvert.SerializeObject(bl.Create_DO(in_num_master_do_id, in_num_do_destinos_id, in_num_sales_type_id, in_str_comments, loadDatefrmt, staDatefrmt, in_str_shipping_plan, in_num_priority, oUser.UserName, in_str_proNumber, reqDatefrmt));
        }
        [WebMethod]
        public static string Create_Detail(int in_num_do_id, int in_num_req_qty, int in_num_org_id, int in_num_weight, int in_num_parts_weight, string in_str_part_number)
        {
            var oUser = (FBC.BO.User)HttpContext.Current.Session[Engine.BO.C.USER];
            ShippingSalesBL bl = new ShippingSalesBL();
            return JsonConvert.SerializeObject(bl.Create_Detail(in_num_do_id, in_num_req_qty, in_num_org_id, in_num_weight, in_num_parts_weight, oUser.UserName, in_str_part_number));
        }

所以WebMethod通过JS上的函数提供信息,然后将它发送到BL,在那里我试图在方法之外声明连接字符串,所以我可以打开连接一次,然后再做所有的方法,但这没有用。我需要做的是创建一个条目(Master),它可以有很多DO,而那些DO可以有很多DODetails。我需要先创建主数据库,因此可以使用主ID创建DO,并使用DO ID创建DODetail。所以它在DB中有3个程序,所以如果其中任何一个失败,我想要回滚,我怎么能这样做?

任何帮助都会受到很大的影响。

0 个答案:

没有答案