/// <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();
}
事务方法插入一条 返回int 插入的KeyId
/// <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;