欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#实现json对象数据批量插入数据库

程序员文章站 2022-06-11 13:28:39
...

最近在做客户的一个项目,其中有一个小地方是用JQgrid表格加载从接口读出的数据,之后提供多选功能,最后再将选中的数据再导入到另一个数据库中。

熟悉JQgrid的同志们都知道,JQgrid获取选中行的数据相当简单,唯独要注意的是,选中的数据是json对象格式的,需要传到后台再导入到数据库中,起初为了赶项目,采取了一种比较”偷懒“的方式,就是每取到一条数据记录就调用一次$.ajax方法传到后台。但是事后一想,这样的方法很菜(因为我本身就很菜),而且在执行效率和服务器压力上都是不太理想的,于是,我现在想把我所有选中行的数据一次性传到后台,这就要用到json多个对象的拼接和转换(我用了JSON.stringify()方法),具体如下:

//保存选中行的数据
        function submitAfter() {
            var ids = $("#tablePayDetail").jqGrid('getGridParam', 'selarrrow');//获取所有选中行的ID
            var objToJsons = "";
            $.each(ids, function (i, o) {
                var rowData = $("#tablePayDetail").jqGrid('getRowData', ids[i]);//当前选中行的数据对象
                var objToJson = JSON.stringify(rowData);
                objToJsons += objToJson + ',';
            })
            var objToJsons_valid = '[' + objToJsons.substring(0, objToJsons.length - 1) + ']';//删除末尾字符',',并生成json字符串
            $.ajax({
                type: "POST",
                data: { rowData: objToJsons_valid },
                dataType: "json",
                url: "/CWFK/InsertPayDetail",
                //success: function (data) { },
                error: function (XMLHttpRequest, textStatus) {
                    layer.alert(XMLHttpRequest.responseText);
                    return;
                }
            })
        }
之后,在后台做这样的处理:

public ActionResult InsertPayDetail(string rowData)
        {
            CW_CWFKSQ_DETAIL_Entity en_detail = new CW_CWFKSQ_DETAIL_Entity();//CW_CWFKSQ_DETAIL_Entity 为实体类
	    bool result = false;
            if (rowData != null)
            {
                List<CW_CWFKSQ_DETAIL_Entity> datalist = JsonHelper.DeserializeJsonToList<CW_CWFKSQ_DETAIL_Entity>(rowData);
                for(int i = 0; i < datalist.Count; i++)
                {
                    en_detail = datalist[i];
                    if (en_detail.ID == 0)//新增
                    {
                        result = new CW_CWFKSQ_DETAIL_BLL().InsertEntity(en_detail);
                    }
                }
            }
            return Json(result, JsonRequestBehavior.AllowGet);
        }
JsonHelper 中 DeserializeJsonToList方法的定义是这样的:

public static List<T> DeserializeJsonToList<T>(string json) where T : class
        {
            JsonSerializer serializer = new JsonSerializer();
            StringReader sr = new StringReader(json);
            object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
            List<T> list = o as List<T>;
            return list;
        }

BLL层 CW_CWFKSQ_DETAIL_BLL() 中 InsertEntity()定义如下:

 public bool InsertEntity(CW_CWFKSQ_DETAIL_Entity enBasic)
        {
            #region
            System.Data.Common.DbTransaction tran = DBFunction.BeginTransaction(connStr);
            try
            {
                Insert(enBasic, true, tran);
                tran.Commit();
            }
            catch (Exception ex)
            {
                tran.Rollback();
                return false;
            }
            return true;
            #endregion
        }
以上。
代码写得既粗糙又啰嗦,请体谅。个人感觉还是有些帮助的。