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
}
以上。代码写得既粗糙又啰嗦,请体谅。个人感觉还是有些帮助的。
上一篇: ASP+XML留言板介绍
下一篇: nginx 代理ip 和域名