关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

sql数据库2000_2005_2008_2015_2017事务方法插入、返回、执行

发布时间:2019-10-22 14:06:03
/// <summary>
        /// 事务方法返回一个sqlscalar 注意查询字段必须唯一且只能为数字
        /// </summary>
        /// <param name="sqlstr">sql语句</param>
        /// <param name="transaction">数据库事务</param>
        /// <returns>返回obj可以强制转换为int</returns>
        public static object tranExecuteScalar(string sqlstr, SqlTransaction transaction)
        {
            SqlCommand cmd = transaction.Connection.CreateCommand();//通过transaction的连接Connection创建一个SqlCommand
            cmd.Transaction = transaction;//元数据分配事务 
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = sqlstr;
            object retval = cmd.ExecuteScalar();
            return retval;
        }

事务方法执行一条sql数据库语句

/// <summary>
        /// 事务方法执行一条sql语句
        /// </summary>
        /// <param name="sqlstr">sql语句</param>
        /// <param name="transaction">事务</param>
        /// <returns></returns>
        public static int tranExecuteNonQuery(string sqlstr, SqlTransaction transaction)
        {
            SqlCommand cmd = transaction.Connection.CreateCommand();//通过transaction的连接Connection创建一个SqlCommand
            cmd.Transaction = transaction;//分配事务 
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = sqlstr;
            return cmd.ExecuteNonQuery();
        }

事务方法插入一条

/// <summary>
        /// 事务方法插入一条 返回int 插入的KeyId 
        /// </summary>
        /// <param name="o">object</param>
        /// <param name="transaction">事务</param>
        /// <returns></returns>
        public static int tranInsert(object o, SqlTransaction transaction)
        {
            SqlCommand cmd = transaction.Connection.CreateCommand();//通过transaction的连接Connection创建一个SqlCommand
            cmd.Transaction = transaction;//分配事务 
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "insert " + TableConvention.Resolve(o) + " ("
                .InjectFrom(new FieldsBy().IgnoreFields("keyid"), o) + ") values("
                .InjectFrom(new FieldsBy().IgnoreFields("keyid").SetFormat("@{0}"), o)
                + ") select @@identity";
            cmd.InjectFrom(new SetParamsValues().IgnoreFields("keyid"), o);
            return Convert.ToInt32(cmd.ExecuteScalar());
        }

调用方法

#endregion
    case "add"://开单
                    #region 数据库事务
                    SqlTransaction tran = SqlHelper.BeginTransaction(SqlEasy.connString);//取得一个事务
                    try
                    {
                        #region 先插入主表
                        int mainInsertedId = 0;//(主表公用)主表插入的ID
                        string edNumber = common.mjcommon.getedNumberJyd();
                        JydOrderModel mainModel = new JydOrderModel();
                        mainModel.InjectFrom(rpm.Entity);
                        mainModel.OrderID = edNumber;
                        //子表赋值给主表
                        mainModel.allyspmc = rpmA.Entity.yspmc;
                        mainModel.status = "0";//添加之后的默认,可在添加时写入
                        mainModel.FlowStatus = "0";
                        string[] arr = edNumber.Split('-');
                        // 子订单个数数组
                        mainModel.OrderInt = int.Parse(arr[3]);
                        mainModel.OrderYear = DateTime.Now.ToString("yyyy-MM-dd");
                        mainModel.jpm= Pinyin.GetCodstring(mainModel.comname).ToLower();//汉字转简拼并小写
                        mainModel.deptid = int.Parse(SysVisitor.Instance.cookiesUserDepId);
                        mainInsertedId = DbUtils.tranInsert(mainModel, tran);//往主表插入一条
                        #endregion
                        #region 再插入明细表
                        //JObject jo = JObject.Parse(detailJson);
                        JArray detailArr = JArray.Parse(detailJson);
                        for (int ii = 0; ii < detailArr.Count; ii++)//循环
                        {
                            var detailobj = JSONhelper.ConvertToObject<JydOrderDetailModel>(detailArr[ii]["d"].ToString());//根据模型把明细表转化为obj
                            JydOrderDetailModel detailModel = new JydOrderDetailModel();//初始化明细表模型
                            detailModel.InjectFrom(detailobj);//把obj插入模型
                            detailModel.orderid = mainModel.OrderID;//orderid关联
                            detailModel.omainid = mainInsertedId;
                            DbUtils.tranInsert(detailModel, tran);////执行写入明细表
                        }
                        //生成二维码
                        string QRCodeUrl = QRCode.Generate(ConfigHelper.GetValue("website")+ "/JydModleOrder/QRCodeView.aspx?KeyID
                        =" + mainInsertedId, @"JydModleOrder\img\gongch.png", DateTime.Now.ToString("yyyyMMdd"));
                        //每添加修改一条数据动态改变二维码
                        DbUtils.tranExecuteNonQuery("update JydOrder set order_img='" + QRCodeUrl + "' where KeyId=" + mainInsertedId, tran);
                        #endregion
                        tran.Commit();//提交事务
                        context.Response.Write(1);
                    }
                    catch (Exception e)
                    {
                        tran.Rollback();
                        WriteLogs.WriteLogsE("Logs", "Error >> GetQRCode", e.Message + " >>> " + e.StackTrace);
                        context.Response.Write(-1);
                    }
                    #endregion
                    //context.Response.Write(JydOrderBll.Instance.Add(rpm.Entity));
                    break;



/template/Home/Zkeys/PC/Static