C#實現json物件資料批量插入資料庫
阿新 • • 發佈:2019-02-02
最近在做客戶的一個專案,其中有一個小地方是用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 為實體類
JsonHelper 中 DeserializeJsonToList方法的定義是這樣的: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); }
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
}
以上。程式碼寫得既粗糙又囉嗦,請體諒。個人感覺還是有些幫助的。