/// <summary> /// 提交数据至数据表 要点:当检测到Adornid Entryid为空,即插入,反之为更新 /// </summary> /// <param name="functionName">AdornOrder:室内装修工程 MaterialOrder:室内主材单</param> /// <param name="sourcedt"></param> /// <param name="deldt">需要删除的记录DT(单据状态为R时使用)</param> /// <returns></returns> public bool ImportDtToDb(string functionName, DataTable sourcedt, DataTable deldt) { var result = true; //定义查询语句 var selectvalue = string.Empty; try { //根据functionName参数,定义tableName变量对应的值 var tablename = functionName == "AdornOrder" ? "T_PRO_AdornEntry" : "T_PRO_MaterialEntry"; //根据functionName创建用于插入的临时表 var insertdtltemp = functionName == "AdornOrder" ? dtList.Get_AdornDTtoDb() : dtList.Get_ProMaterialToDb(); //根据functionName创建用于更新的临时表 var updatedtltemp = functionName == "AdornOrder" ? dtList.Get_AdornDTtoDb() : dtList.Get_ProMaterialToDb(); //若发现要进行操作的是AdornOrder,需将sourcedt内的‘装修工程类别’列删除 if (functionName == "AdornOrder") { sourcedt.Columns.Remove("装修工程类别"); } //获取Adornid(EntryId)为空的记录(用于插入使用) selectvalue = functionName == "AdornOrder" ? "Adornid IS NULL" : "EntryID is null"; var dtlnullrows = sourcedt.Select(selectvalue); for (var i = 0; i < dtlnullrows.Length; i++) { var newrow = insertdtltemp.NewRow(); for (var j = 0; j < insertdtltemp.Columns.Count; j++) { if (j == 1) { //创建新的Adornid(EntryId) newrow[j] = Maxid(tablename, null); } else { newrow[j] = dtlnullrows[i][j]; } } insertdtltemp.Rows.Add(newrow); } //获取Adornid(EntryId)不为空的记录(用于更新使用) selectvalue = functionName == "AdornOrder" ? "Adornid IS not NULL" : "EntryID is not null"; var dtlnotnullrows = sourcedt.Select(selectvalue); for (var i = 0; i < dtlnotnullrows.Length; i++) { var newrow = updatedtltemp.NewRow(); for (var j = 0; j < updatedtltemp.Columns.Count; j++) { newrow[j] = dtlnotnullrows[i][j]; } updatedtltemp.Rows.Add(newrow); } //最后将得出的结果进行插入或更新 if (insertdtltemp.Rows.Count > 0) { Importdt(tablename, insertdtltemp); } if (updatedtltemp.Rows.Count > 0) { UpEntrydt(tablename, updatedtltemp); } //若deldt有值的话都执行删除方法 if (deldt?.Rows.Count > 0) { generateDt.Del(functionName, deldt); } } catch (Exception) { result = false; } return(result); }