这是第四步点击保存将信息存入数据库中。
这个就简单了利用ajax将JSON字符串传到后台然后这里有个知识点就是将DataTable直接存入数据库中。代码如下:
一、界面获取数据JS代码:
//保存订单信息 function SaveToJson() { //单位 var Company = document.getElementById("lblCompany").innerHTML; //NO var OrderNo = document.getElementById("lblNO").innerHTML; //下单类型 var XDLX = document.getElementById("ddXDLX").value; //转库凭证号 var ZKPZH = document.getElementById("txtZKPZH").value; //日期 var OrderDate = document.getElementById("lblDate").innerHTML; //代理商ID var intDLSID = document.getElementById("hidDLSID").value; strReturned = returned.toString() $.post("../DDGL/handler/SaveZCXDInfo.ashx", { strReturned: strReturned, Company: Company, OrderNo: OrderNo, XDLX: XDLX, ZKPZH: ZKPZH, OrderDate: OrderDate, intDLSID: intDLSID }, function(data) { if (data == "True") { alert("添加成功!") } else { alert("添加失败!") } window.location.href = "QueryDJLJList.aspx"; }); }
二、SaveZCXDInfo.ashx代码。
这个代码中我将JSON字符串转化成对象,在将对象转化成和数据库表结构一致的DataTable。代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using Model; using BLL; using System.Data; namespace WEB.DDGL.handler { public class QueryTotalMoney : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //获取主表信息 int intDLSID = Convert.ToInt32(context.Request.Form["intDLSID"].ToString().Trim()); string strLJInfo = context.Request.Form["strReturned"].ToString(); string strCompany = context.Request.Form["Company"].ToString(); string strOrderNo = context.Request.Form["OrderNo"].ToString(); string strXDLX = context.Request.Form["XDLX"].ToString(); string strZKPZH = context.Request.Form["ZKPZH"].ToString(); string strOrderDate = context.Request.Form["OrderDate"].ToString(); //主表插入信息 MT_DLS_Order Order = new MT_DLS_Order(); Order.beginDate = strOrderDate; Order.Company = strCompany; Order.DLSID = intDLSID.ToString(); Order.XDLX = strXDLX; Order.ZKPZH = strZKPZH; Order.OrderCode = strOrderNo; Order.SFQBFH = "否"; Order.IsCancel = "否"; Order.SFJRFee = "否"; //获取从表信息 /* * 1、新建一个DataTable * 2、把传来的Json字符串改成数组 * 3、把数组变成对象 * 4、把对象的值赋给DataTable * */ //新建一个DataTable DataTable dtLJInfo = new DataTable("T_DLS_Order_Cong"); dtLJInfo.TableName = "T_DLS_Order_Cong"; //添加DataTable数据项 dtLJInfo.Columns.Add(new DataColumn("ID", typeof(int))); dtLJInfo.Columns.Add(new DataColumn("name", typeof(string))); dtLJInfo.Columns.Add(new DataColumn("beginDate", typeof(string))); dtLJInfo.Columns.Add(new DataColumn("OrderID", typeof(int))); dtLJInfo.Columns.Add(new DataColumn("LJID", typeof(int))); dtLJInfo.Columns.Add(new DataColumn("LJBM", typeof(string))); dtLJInfo.Columns.Add(new DataColumn("LJMC", typeof(string))); dtLJInfo.Columns.Add(new DataColumn("Numbers", typeof(int))); dtLJInfo.Columns.Add(new DataColumn("Money", typeof(decimal))); dtLJInfo.Columns.Add(new DataColumn("DJNo", typeof(string))); dtLJInfo.Columns.Add(new DataColumn("SFFH", typeof(string))); dtLJInfo.Columns.Add(new DataColumn("FHRNo", typeof(string))); dtLJInfo.Columns.Add(new DataColumn("FHRName", typeof(string))); dtLJInfo.Columns.Add(new DataColumn("FHDate", typeof(string))); dtLJInfo.Columns.Add(new DataColumn("IsCancel", typeof(string))); //把Json字符串改成数组 JArray jaLJInfo = (JArray)JsonConvert.DeserializeObject(strLJInfo); if (strXDLX == "正常下单") { for (int i = 0; i < jaLJInfo.Count; i++) { JObject obj = (JObject)jaLJInfo[i]; DataRow drLJInfo = dtLJInfo.NewRow(); string strLJID = obj["LJID"].ToString().Trim(); string strNumbers = obj["SL"].ToString(); string strMoney = obj["Money"].ToString(); string strLJBM = obj["LJBM"].ToString(); string strLJMC = obj["LJMC"].ToString(); strLJID = strLJID.Replace(""", ""); strNumbers = strNumbers.Replace(""", ""); strMoney = strMoney.Replace(""", ""); strLJBM = strLJBM.Replace(""", ""); strLJMC = strLJMC.Replace(""", ""); drLJInfo["LJID"] = Convert.ToInt32(strLJID); drLJInfo["LJBM"] = strLJBM; drLJInfo["LJMC"] = strLJMC; drLJInfo["Numbers"] = Convert.ToInt32(strNumbers); drLJInfo["Money"] = Convert.ToDecimal(strMoney); drLJInfo["beginDate"] = strOrderDate; drLJInfo["IsCancel"] = "否"; drLJInfo["SFFH"] = "否"; dtLJInfo.Rows.Add(drLJInfo); } } else { for (int i = 0; i < jaLJInfo.Count; i++) { JObject obj = (JObject)jaLJInfo[i]; DataRow drLJInfo = dtLJInfo.NewRow(); string strLJID = obj["LJID"].ToString().Trim(); string strMoney = obj["Money"].ToString(); string strLJBM = obj["LJBM"].ToString(); string strLJMC = obj["LJMC"].ToString(); string strDJNo = obj["DJBH"].ToString(); strLJID = strLJID.Replace(""", ""); strMoney = strMoney.Replace(""", ""); strLJBM = strLJBM.Replace(""", ""); strLJMC = strLJMC.Replace(""", ""); strDJNo = strDJNo.Replace(""", ""); drLJInfo["LJID"] = Convert.ToInt32(strLJID); drLJInfo["LJBM"] = strLJBM; drLJInfo["LJMC"] = strLJMC; drLJInfo["Money"] = Convert.ToDecimal(strMoney); drLJInfo["beginDate"] = strOrderDate; drLJInfo["DJNo"] = strDJNo; drLJInfo["SFFH"] = "否"; drLJInfo["IsCancel"] = "否"; dtLJInfo.Rows.Add(drLJInfo); } } BT_XDMgr XDMgr = new BT_XDMgr(); if (XDMgr.AddOrder(Order, dtLJInfo)) { context.Response.Write("True"); } else { context.Response.Write("False"); } context.Response.End(); } public bool IsReusable { get { return false; } } } }
三、BLL层代码。
/// <summary> /// 添加到数据库 /// </summary> /// <param name="Order"></param> /// <param name="dt"></param> /// <returns></returns> public bool AddOrder(MT_DLS_Order Order,DataTable dt) { DT_DLS_Order OrderDal = new DT_DLS_Order(); DT_DLS_Order_Cong OrderCongDal = new DT_DLS_Order_Cong(); DT_DLS_Order_LC OrderLCDal = new DT_DLS_Order_LC(); decimal TotalMoney=0; //添加主单信息 int OrderID = OrderDal.Add(Order); //添加订单ID在从表中 for (int i = 0; i < dt.Rows.Count; i++) { dt.Rows[i]["OrderID"] = OrderID; TotalMoney = TotalMoney +Convert.ToDecimal( dt.Rows[i]["Money"].ToString().Trim()); } //更新总金额 Order.ID = OrderID; Order.OrderMoney = TotalMoney; //判断是否更新成功 if (OrderDal.Update(Order)) { //添加订单从表 //判断是否添加从表成功 if (OrderCongDal.AddOrderInfoByDataTable(dt)) { //添加此订单的流程 //查询出流程ID //查询所有的节点ID int ZFGDLS = Convert.ToInt32(ConfigurationSettings.AppSettings["ZFGDLS"].ToString()); DataTable dtZFGDLSJD = new DataTable(); dtZFGDLSJD = OrderLCDal.QueryAllJD(ZFGDLS); //判断流程中是否有节点 if (dtZFGDLSJD.Rows.Count > 0) { DataTable dtOrderLC = new DataTable(); dtOrderLC.TableName = "T_DLS_Order_LC"; dtOrderLC.Columns.Add(new DataColumn("ID", typeof(int))); dtOrderLC.Columns.Add(new DataColumn("name", typeof(string))); dtOrderLC.Columns.Add(new DataColumn("beginDate", typeof(string))); dtOrderLC.Columns.Add(new DataColumn("OrderID", typeof(string))); dtOrderLC.Columns.Add(new DataColumn("LCID", typeof(string))); dtOrderLC.Columns.Add(new DataColumn("State", typeof(string))); dtOrderLC.Columns.Add(new DataColumn("CZRNo", typeof(string))); dtOrderLC.Columns.Add(new DataColumn("CZRName", typeof(string))); for (int i = 0; i < dtZFGDLSJD.Rows.Count; i++) { DataRow drOrderLCInfo = dtOrderLC.NewRow(); drOrderLCInfo["OrderID"] = Order.ID; drOrderLCInfo["LCID"] = dtZFGDLSJD.Rows[i]["ID"].ToString().Trim(); if (i == 0) { drOrderLCInfo["State"] = "是"; drOrderLCInfo["CZRNo"] = Order.DLSID; drOrderLCInfo["CZRName"] = Order.Company; drOrderLCInfo["beginDate"] = Order.beginDate; } else { drOrderLCInfo["State"] = "否"; } dtOrderLC.Rows.Add(drOrderLCInfo); } //判断添加流程是否成功 if (OrderLCDal.AddOrderLC(dtOrderLC)) { return true; } else { return false; } } else { return false; } } else { return false; } } else { return false; } }
四、D层中关键的代码。
将传回去的DataTable直接存到数据库中:
代码如下:
/// <summary> /// 将datatable中的数据批量插入数据库 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static Boolean makeDatatableIntoDatabase(DataTable dt) { SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction); sqlbulkcopy.DestinationTableName = dt.TableName;//数据库中的表名 try { sqlbulkcopy.WriteToServer(dt); return true; } catch (Exception ex) { return false; } }
这里值得注意的是:我们传过来的DataTable TableName要和数据库中表名一致,DataTable中的字段顺序,类型、名称要和数据库中的字段字段顺序,类型、名称一致才行。
五、效果图。
六、综述。
就这四步把整个功能一一展现出来了用到的知识点很多。从这个功能中我的体会就是实习完回去赶紧多做些这样的小Demo保存好工作的时候直接用不要等到工作了慢慢的研究。其实我们做项目都是一个个小Demo拼接出来的。所以多做Demo工作上遇到了开发效率就高了。