1. 程式人生 > >C#實現json物件資料批量插入資料庫

C#實現json物件資料批量插入資料庫

最近在做客戶的一個專案,其中有一個小地方是用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
        }
以上。
程式碼寫得既粗糙又囉嗦,請體諒。個人感覺還是有些幫助的。