CNAS取数仪器端升级
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

619 linhas
29KB

  1. using CnasSynchronousCommon;
  2. using CnasSynchrousModel;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Text.RegularExpressions;
  9. namespace CnasSynchronusClient
  10. {
  11. public class CnasInsertOperation
  12. {
  13. /// <summary>
  14. /// 同步配置信息
  15. /// </summary>
  16. public SyncInstrumentItemInfo syncInstrumentItem { get; set; }
  17. /// <summary>
  18. /// 创建准备插入到CNAS的数据
  19. /// </summary>
  20. /// <param name="dtReadySource"></param>
  21. /// <param name="dtTarget"></param>
  22. /// <returns></returns>
  23. public string CreateInputData(DataTable dtReadySource, ref DataTable dtTarget)
  24. {
  25. string strErrorMsg = "";
  26. string strDateColumn = "";
  27. try
  28. {
  29. //获取日期字段
  30. strDateColumn = GetDateFieldOperation(ref strErrorMsg);
  31. if (strErrorMsg != "") return strErrorMsg;
  32. //新数据行的创建和插入数据
  33. foreach (DataRow drSource in dtReadySource.Rows)
  34. {
  35. DataRow drNewTarget = dtTarget.NewRow();
  36. //根据过滤器执行来源数据过滤
  37. AppLog.Info("过滤检测");
  38. if (!SourceDataFilterOperation(drSource)) continue;
  39. //根据映射字段尝试塞入数据到数据行,排除不合法数据。
  40. AppLog.Info("合法性检测");
  41. NormalParamsValueInsertOperation(dtReadySource, dtTarget, drSource, drNewTarget, strDateColumn, ref strErrorMsg);
  42. if (strErrorMsg != "") break;
  43. //根据固定值字段塞入数据到数据行
  44. AppLog.Info("条件映射数据更改");
  45. FixConditonParamsInsertOperation(dtReadySource, dtTarget, drSource, drNewTarget);
  46. //补充仪器信息数据
  47. AppLog.Info("补充仪器信息数据");
  48. if (syncInstrumentItem.CnasInstrumentColumn == null)
  49. {
  50. strErrorMsg = "未设置的CNAS仪器信息列,请先配置";
  51. break;
  52. }
  53. if (dtTarget.Columns.Contains(syncInstrumentItem.CnasInstrumentColumn))
  54. drNewTarget[syncInstrumentItem.CnasInstrumentColumn] = syncInstrumentItem.GUID;
  55. else
  56. {
  57. strErrorMsg = "设置的CNAS仪器信息列没有在库中找到,请重新配置";
  58. break;
  59. }
  60. //塞入数据的数据行包含到dt中
  61. dtTarget.Rows.Add(drNewTarget);
  62. }
  63. AppLog.Info("构造数据行循环结束");
  64. }
  65. catch (Exception ex)
  66. {
  67. AppLog.Error(ex.Message);
  68. strErrorMsg = ex.Message;
  69. }
  70. return strErrorMsg;
  71. }
  72. /// <summary>
  73. /// 获取日期字段
  74. /// </summary>
  75. /// <param name="strErrorMsg"></param>
  76. /// <returns></returns>
  77. private string GetDateFieldOperation(ref string strErrorMsg)
  78. {
  79. string strDateColumn="";
  80. var query = syncInstrumentItem.LstSyncPramas.Where(s => s.IfDateField == true).ToList<SyncParamasInfo>();
  81. if (query.Count != 1)
  82. {
  83. strErrorMsg = "创建CNAS数据行失败,未找到日期字段。";
  84. }
  85. else
  86. {
  87. strDateColumn = query[0].TargetField;
  88. }
  89. return strDateColumn;
  90. }
  91. /// <summary>
  92. /// 普通值(非固定值)插入操作
  93. /// </summary>
  94. /// <param name="dtReadySource"></param>
  95. /// <param name="dtTarget"></param>
  96. /// <param name="drSource"></param>
  97. /// <param name="drNewTarget"></param>
  98. /// <param name="strDateField"></param>
  99. /// <param name="strErrorMsg"></param>
  100. private void NormalParamsValueInsertOperation(DataTable dtReadySource, DataTable dtTarget, DataRow drSource, DataRow drNewTarget,string strDateField,ref string strErrorMsg)
  101. {
  102. foreach (var item in syncInstrumentItem.LstSyncPramas)
  103. {
  104. var strSourceField = item.SourceField;
  105. var strTargetField = item.TargetField;
  106. //当列名存在于数据表中时才能继续
  107. if (dtReadySource.Columns.Contains(strSourceField) && dtTarget.Columns.Contains(strTargetField))
  108. {
  109. strErrorMsg = TestConvertValueToTarget(drNewTarget, drSource, strTargetField, strSourceField, strDateField);
  110. if (strErrorMsg != "")
  111. {
  112. strErrorMsg = string.Format("发生数据转换错误,请重新配置映射字段或修改字段值。错误信息如下:列【{0}】,值【{1}】,详情【{2}】", strSourceField, drSource[strSourceField].ToString(), strErrorMsg);
  113. break;
  114. }
  115. }
  116. }
  117. }
  118. /// <summary>
  119. /// 固定值插入数据操作
  120. /// </summary>
  121. /// <param name="dtReadySource"></param>
  122. /// <param name="dtTarget"></param>
  123. /// <param name="drSource"></param>
  124. /// <param name="drNewTarget"></param>
  125. public void FixConditonParamsInsertOperation(DataTable dtReadySource,DataTable dtTarget,DataRow drSource,DataRow drNewTarget)
  126. {
  127. try
  128. {
  129. foreach (var item in syncInstrumentItem.lstFixedValue)
  130. {
  131. if (dtTarget.Columns.Contains(item.ColumnName))
  132. {
  133. switch (item.Condition)
  134. {
  135. case MapCondition.Equal:
  136. drNewTarget[item.ColumnName] = item.Value;
  137. break;
  138. case MapCondition.Sub:
  139. ChangeSubConditionValue(item, dtReadySource, drSource, drNewTarget);
  140. break;
  141. case MapCondition.IFThen:
  142. ChangeIFThenConditionValue(item, dtReadySource, drSource, drNewTarget);
  143. break;
  144. case MapCondition.SubString:
  145. ChangeSubStringConditonValue(item, drNewTarget);
  146. break;
  147. case MapCondition.SubstringStartEnd:
  148. ChangeStartEndSubStringConditonValue(item, drNewTarget);
  149. break;
  150. case MapCondition.Divided:
  151. if (double.TryParse(drNewTarget[item.ColumnName].ToString(), out double db1))
  152. {
  153. if (double.TryParse(item.Value.ToString(), out double db2))
  154. drNewTarget[item.ColumnName] = db1 / db2;
  155. }
  156. break;
  157. case MapCondition.Multiplied:
  158. if (double.TryParse(drNewTarget[item.ColumnName].ToString(), out double db3))
  159. {
  160. if (double.TryParse(item.Value.ToString(), out double db4))
  161. drNewTarget[item.ColumnName] = db3 * db4;
  162. }
  163. break;
  164. case MapCondition.DecimalDigits:
  165. if (double.TryParse(drNewTarget[item.ColumnName].ToString(), out double db5))
  166. {
  167. if (int.TryParse(item.Value.ToString(), out int count))
  168. drNewTarget[item.ColumnName] = Math.Round(db5, count);
  169. }
  170. break;
  171. case MapCondition.AddSubtract:
  172. ChangeAddSubtractConditonValue(syncInstrumentItem.lstFixedValue, item, dtReadySource, drSource, drNewTarget);
  173. break;
  174. }
  175. }
  176. }
  177. }
  178. catch (Exception ex)
  179. {
  180. AppLog.Error(ex.Message);
  181. }
  182. }
  183. private void ChangeStartEndSubStringConditonValue(CnasConditionMapValue item, DataRow drNewTarget)
  184. {
  185. try
  186. {
  187. if (item.Value != null && item.Value.ToString() != "")
  188. {
  189. string[] strValues = item.Value.ToString().Split(new string[] { "{", ",", "}" }, StringSplitOptions.RemoveEmptyEntries);
  190. if (strValues.Length == 2)
  191. {
  192. string[] strConfigValues = strValues[0].Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
  193. if (strValues[1] == "S")
  194. {
  195. //Regex reg = new Regex($"^[{strValues[0]}]");
  196. //if (reg.IsMatch(drNewTarget[item.ColumnName].ToString()))
  197. // drNewTarget[item.ColumnName] = drNewTarget[item.ColumnName].ToString().(0, drNewTarget[item.ColumnName].ToString().Length - 1);
  198. foreach (string strConfigValue in strConfigValues)
  199. {
  200. if (drNewTarget[item.ColumnName].ToString().StartsWith(strConfigValue))
  201. {
  202. drNewTarget[item.ColumnName] = drNewTarget[item.ColumnName].ToString().Substring(strConfigValue.Length, drNewTarget[item.ColumnName].ToString().Length - strConfigValue.Length);
  203. break;
  204. }
  205. }
  206. }
  207. else if (strValues[1] == "E")
  208. {
  209. //Regex reg = new Regex($"[{strValues[0]}]$");
  210. //if (reg.IsMatch(drNewTarget[item.ColumnName].ToString()))
  211. // drNewTarget[item.ColumnName] = drNewTarget[item.ColumnName].ToString().Substring(0, drNewTarget[item.ColumnName].ToString().Length-1);
  212. foreach (string strConfigValue in strConfigValues)
  213. {
  214. if (drNewTarget[item.ColumnName].ToString().EndsWith(strConfigValue))
  215. {
  216. drNewTarget[item.ColumnName] = drNewTarget[item.ColumnName].ToString().Substring(0, drNewTarget[item.ColumnName].ToString().Length - strConfigValue.Length);
  217. break;
  218. }
  219. }
  220. }
  221. }
  222. }
  223. }
  224. catch (Exception ex)
  225. {
  226. AppLog.Error(ex.Message);
  227. }
  228. }
  229. /// <summary>
  230. /// 处理SUB类型固定值
  231. /// </summary>
  232. /// <param name="item"></param>
  233. /// <param name="dtReadySource"></param>
  234. /// <param name="drSource"></param>
  235. /// <param name="drNewTarget"></param>
  236. private void ChangeSubConditionValue(CnasConditionMapValue item, DataTable dtReadySource, DataRow drSource, DataRow drNewTarget)
  237. {
  238. try
  239. {
  240. //解析Value值,如果不能解析,直接插入Value值
  241. if (item.Value != null && item.Value.ToString() != "")
  242. {
  243. string strInputValue = "";
  244. string[] strValues = item.Value.ToString().Split(new string[] { "+" }, StringSplitOptions.RemoveEmptyEntries);
  245. if (strValues.Length >= 1 && strValues.Length <= 3)
  246. {
  247. switch (strValues.Length)
  248. {
  249. case 1:
  250. string strColumnName1 = strValues[0].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  251. if (dtReadySource.Columns.Contains(strColumnName1))
  252. strInputValue = drSource[strColumnName1].ToString();
  253. else
  254. strInputValue = strValues[0];
  255. break;
  256. case 2:
  257. strColumnName1 = strValues[0].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  258. if (dtReadySource.Columns.Contains(strColumnName1))
  259. strInputValue = drSource[strColumnName1].ToString();
  260. else
  261. strInputValue = strValues[0];
  262. string strColumnName2 = strValues[1].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  263. if (dtReadySource.Columns.Contains(strColumnName2))
  264. strInputValue += drSource[strColumnName2].ToString();
  265. else
  266. strInputValue += strValues[1];
  267. break;
  268. case 3:
  269. strColumnName1 = strValues[0].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  270. if (dtReadySource.Columns.Contains(strColumnName1))
  271. strInputValue = drSource[strColumnName1].ToString();
  272. else
  273. strInputValue = strValues[0];
  274. strColumnName2 = strValues[1].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  275. if (dtReadySource.Columns.Contains(strColumnName2))
  276. strInputValue += drSource[strColumnName2].ToString();
  277. else
  278. strInputValue += strValues[1];
  279. string strColumnName3 = strValues[2].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  280. if (dtReadySource.Columns.Contains(strColumnName3))
  281. strInputValue += drSource[strColumnName3].ToString();
  282. else
  283. strInputValue += strValues[2];
  284. break;
  285. }
  286. }
  287. else
  288. {
  289. strInputValue = item.Value.ToString();
  290. }
  291. drNewTarget[item.ColumnName] = strInputValue;
  292. }
  293. }
  294. catch (Exception ex)
  295. {
  296. AppLog.Error(ex.Message);
  297. }
  298. }
  299. private bool SourceDataFilterOperation(DataRow dr)
  300. {
  301. //如果过滤器为空或没有任何条件,我们认为用户允许所有数据通过过滤审核
  302. if (syncInstrumentItem.SourceFilter == null) return true;
  303. if (syncInstrumentItem.SourceFilter.lstFilterConditions == null) return true;
  304. if (syncInstrumentItem.SourceFilter.lstFilterConditions.Count == 0) return true;
  305. bool bReturn = false;
  306. try
  307. {
  308. List<bool> lstMatch = new List<bool>();
  309. foreach (FilterCondition item in syncInstrumentItem.SourceFilter.lstFilterConditions)
  310. {
  311. bool bIsMatch = false;
  312. string strConditionValue = item.ConditionValue;
  313. if (strConditionValue == null) continue;
  314. if (strConditionValue.StartsWith("RegEx")) //此时使用正则表达式匹配
  315. {
  316. string[] strRegExs = strConditionValue.Split(new string[] { "RegEx:" }, StringSplitOptions.RemoveEmptyEntries);
  317. if (strRegExs.Length != 1) continue;
  318. bIsMatch = Regex.IsMatch(dr[item.ColumnName].ToString(), strRegExs[0]);
  319. }
  320. else
  321. {
  322. switch (item.Algorithm)
  323. {
  324. case "=":
  325. bIsMatch = dr[item.ColumnName].ToString() == item.ConditionValue ? true : false;
  326. break;
  327. case "<>":
  328. bIsMatch = dr[item.ColumnName].ToString() == item.ConditionValue ? false : true;
  329. break;
  330. case "like":
  331. bIsMatch = dr[item.ColumnName].ToString().Contains(item.ConditionValue) ? true : false;
  332. break;
  333. case "not like":
  334. bIsMatch = dr[item.ColumnName].ToString().Contains(item.ConditionValue) ? false : true;
  335. break;
  336. case ">":
  337. if (dr[item.ColumnName] != null)
  338. if (double.TryParse(dr[item.ColumnName].ToString(), out double result) && double.TryParse(item.ConditionValue, out double conditionresult))
  339. bIsMatch = result > conditionresult ? true : false;
  340. break;
  341. case "<":
  342. if (dr[item.ColumnName] != null)
  343. if (double.TryParse(dr[item.ColumnName].ToString(), out double result) && double.TryParse(item.ConditionValue, out double conditionresult))
  344. bIsMatch = result < conditionresult ? true : false;
  345. break;
  346. case ">=":
  347. if (dr[item.ColumnName] != null)
  348. if (double.TryParse(dr[item.ColumnName].ToString(), out double result) && double.TryParse(item.ConditionValue, out double conditionresult))
  349. bIsMatch = result >= conditionresult ? true : false;
  350. break;
  351. case "<=":
  352. if (dr[item.ColumnName] != null)
  353. if (double.TryParse(dr[item.ColumnName].ToString(), out double result) && double.TryParse(item.ConditionValue, out double conditionresult))
  354. bIsMatch = result <= conditionresult ? true : false;
  355. break;
  356. }
  357. }
  358. lstMatch.Add(bIsMatch);
  359. }
  360. if (syncInstrumentItem.SourceFilter.FilterConditionLinkType == "and")
  361. {
  362. //只要有一个为否,则返回否
  363. if (lstMatch.Where(x => x.Equals(false)).Count() > 0)
  364. bReturn = false;
  365. else
  366. bReturn = true;
  367. }
  368. else
  369. {
  370. //只要有一个为是,则返回是
  371. if (lstMatch.Where(x => x.Equals(true)).Count() > 0)
  372. bReturn = true;
  373. else
  374. bReturn = false;
  375. }
  376. }
  377. catch (Exception ex)
  378. {
  379. AppLog.Error(ex.Message);
  380. }
  381. return bReturn;
  382. }
  383. /// <summary>
  384. /// 处理IFThen类型固定值
  385. /// </summary>
  386. /// <param name="item"></param>
  387. /// <param name="dtReadySource"></param>
  388. /// <param name="drSource"></param>
  389. /// <param name="drNewTarget"></param>
  390. private void ChangeIFThenConditionValue(CnasConditionMapValue item, DataTable dtReadySource, DataRow drSource, DataRow drNewTarget)
  391. {
  392. try
  393. {
  394. if (item.Value != null && item.Value.ToString() != "")
  395. {
  396. List<IFThenConditionParams> lstParams = GlobalCommonOperation.AnanlysisIFThenString(item.Value.ToString());
  397. if (lstParams.Count > 0)
  398. {
  399. foreach (var conditionparams in lstParams)
  400. {
  401. if (!dtReadySource.Columns.Contains(conditionparams.ConditionColumnName)) continue;
  402. if (drSource[conditionparams.ConditionColumnName].ToString() == conditionparams.ConditionColumnValue)
  403. drNewTarget[item.ColumnName] = conditionparams.ColumnValue;
  404. }
  405. }
  406. }
  407. }
  408. catch (Exception ex)
  409. {
  410. AppLog.Error(ex.Message);
  411. }
  412. }
  413. /// <summary>
  414. /// 处理SubString类型固定值
  415. /// </summary>
  416. /// <param name="item"></param>
  417. /// <param name="dtReadySource"></param>
  418. /// <param name="drSource"></param>
  419. /// <param name="drNewTarget"></param>
  420. private void ChangeSubStringConditonValue(CnasConditionMapValue item, DataRow drNewTarget)
  421. {
  422. try
  423. {
  424. if (item.Value != null && item.Value.ToString() != "")
  425. {
  426. string[] strValues = item.Value.ToString().Split(new string[] { "{", ",", "}" }, StringSplitOptions.RemoveEmptyEntries);
  427. if (strValues.Length == 2)
  428. {
  429. string[] strInputValues = drNewTarget[item.ColumnName].ToString().Split(new string[] { strValues[0] }, StringSplitOptions.RemoveEmptyEntries);
  430. if (strInputValues.Length == 1)
  431. {
  432. drNewTarget[item.ColumnName] = strInputValues[0];
  433. }
  434. if (strInputValues.Length == 2) //只处理分割后有两部分的
  435. {
  436. if (strValues[1] == "L")
  437. {
  438. drNewTarget[item.ColumnName] = strInputValues[0];
  439. }
  440. else if (strValues[1] == "R")
  441. {
  442. drNewTarget[item.ColumnName] = strInputValues[1];
  443. }
  444. }
  445. }
  446. }
  447. }
  448. catch (Exception ex)
  449. {
  450. AppLog.Error(ex.Message);
  451. }
  452. }
  453. private void ChangeAddSubtractConditonValue(List<CnasConditionMapValue> lstConditionMaps, CnasConditionMapValue item, DataTable dtReadySource, DataRow drSource, DataRow drNewTarget)
  454. {
  455. try
  456. {
  457. if (item.Value != null && item.Value.ToString() != "")
  458. {
  459. string[] strValues = item.Value.ToString().Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries);
  460. if (strValues.Length == 3)
  461. {
  462. string strParam1 = strValues[0];
  463. string strParam2 = strValues[2];
  464. string[] strParam1s = strParam1.Split(new string[] { "[", "]" }, StringSplitOptions.RemoveEmptyEntries);
  465. if (strParam1s.Length >= 1)
  466. {
  467. string[] strParam2s = strParam2.Split(new string[] { "[", "]" }, StringSplitOptions.RemoveEmptyEntries);
  468. if (strParam2s.Length >= 1)
  469. {
  470. if (dtReadySource.Columns.Contains(strParam1s[0]) && dtReadySource.Columns.Contains(strParam2s[0]))
  471. if (double.TryParse(drSource[strParam1s[0]].ToString(), out double db1))
  472. {
  473. if (double.TryParse(drSource[strParam2s[0]].ToString(), out double db2))
  474. {
  475. if (strParam1s.Length == 3)
  476. db1 = GetDividedMultipliedData(db1, strParam1s[1], strParam1s[2]);
  477. if (strParam2s.Length == 3)
  478. db2 = GetDividedMultipliedData(db2, strParam2s[1], strParam2s[2]);
  479. drNewTarget[item.ColumnName] = strValues[1].ToLower() == "subtract" ? db1 - db2 : db1 + db2;
  480. }
  481. }
  482. }
  483. }
  484. }
  485. }
  486. }
  487. catch (Exception ex)
  488. {
  489. AppLog.Error(ex.Message);
  490. }
  491. }
  492. /// <summary>
  493. /// 在计算数值相加和相减之前,如果计算的列已经有乘以或除以的操作,则先进行乘以或除以,再进行相加或相减
  494. /// </summary>
  495. /// <param name="lstConditionMaps"></param>
  496. /// <param name="drSource"></param>
  497. /// <param name="db1"></param>
  498. /// <param name="strColumnName"></param>
  499. /// <returns></returns>
  500. public double GetDividedMultipliedData(double db1, string strExpresstion, string strValue)
  501. {
  502. if (double.TryParse(strValue, out double db2))
  503. {
  504. db1 = strExpresstion == "*" ? db1 * db2 : db1 / db2;
  505. }
  506. return db1;
  507. }
  508. /// <summary>
  509. /// 对准备插入的数据进行格式上的检查
  510. /// </summary>
  511. /// <param name="dtTarget"></param>
  512. /// <param name="strErrorMsg"></param>
  513. public void CheckInsertDataFormat(DataTable dtTarget, ref string strErrorMsg)
  514. {
  515. //检查数据合法性
  516. CnasDataCheck check = new CnasDataCheck
  517. {
  518. DtReadyInsert = dtTarget,
  519. TargetDataBase = syncInstrumentItem.SyncTargetDBInfo,
  520. StrTableName = syncInstrumentItem.LstSyncPramas[0].TargetTable
  521. };
  522. check.CheckData();
  523. if (check.LstIllegalMsg != null && check.LstIllegalMsg.Count > 0)
  524. {
  525. var item = syncInstrumentItem.LstSyncPramas.Where(s => s.TargetField == check.LstIllegalMsg[0].ColumnName).ToList<SyncParamasInfo>();
  526. if (item.Count == 1)
  527. {
  528. strErrorMsg = string.Format("数据不满足上传条件,请修改后再上传。错误数据:当前列名【{0}】,列值【{1}】", item[0].SourceField, check.LstIllegalMsg[0].ColumnValue);
  529. }
  530. else
  531. {
  532. strErrorMsg = string.Format("数据不满足上传条件,请修改后再上传。错误数据:CNAS列名【{0}】,列值【{1}】", check.LstIllegalMsg[0].ColumnName, check.LstIllegalMsg[0].ColumnValue);
  533. }
  534. return;
  535. }
  536. }
  537. /// <summary>
  538. /// 尝试将值插入到目标表单的各个行中
  539. /// </summary>
  540. /// <returns></returns>
  541. private string TestConvertValueToTarget(DataRow drTarget, DataRow drSource, string strTargetColumn, string strSourceColumn, string strDateColumn)
  542. {
  543. string strErrorMsg = "";
  544. try
  545. {
  546. if (strTargetColumn.ToLower() != strDateColumn.ToLower())
  547. {
  548. string strTargetColumnType = drTarget.Table.Columns[strTargetColumn].DataType.ToString();
  549. switch (strTargetColumnType)
  550. {
  551. case "System.Decimal":
  552. if (drSource[strSourceColumn] == null || (drSource[strSourceColumn] != null && drSource[strSourceColumn].ToString() == ""))
  553. drTarget[strTargetColumn] = 0;
  554. else
  555. drTarget[strTargetColumn] = Convert.ToDouble(drSource[strSourceColumn]);
  556. break;
  557. default:
  558. drTarget[strTargetColumn] = drSource[strSourceColumn];
  559. break;
  560. }
  561. }
  562. else //日期字段需要单独处理
  563. {
  564. DateTime dt = DateTime.Now;
  565. if (DateTime.TryParse(drSource[strSourceColumn].ToString(), out dt))
  566. {
  567. drTarget[strTargetColumn] = dt.ToString("yyyy-MM-dd HH:mm:ss");
  568. }
  569. else
  570. {
  571. drTarget[strTargetColumn] = drSource[strSourceColumn];
  572. }
  573. }
  574. }
  575. catch (Exception ex)
  576. {
  577. strErrorMsg = ex.Message;
  578. }
  579. return strErrorMsg;
  580. }
  581. }
  582. }