CNAS取数仪器端升级
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

627 Zeilen
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. double db1, db2;
  152. if (double.TryParse(drNewTarget[item.ColumnName].ToString(), out db1))
  153. {
  154. if (double.TryParse(item.Value.ToString(), out db2))
  155. drNewTarget[item.ColumnName] = db1 / db2;
  156. }
  157. break;
  158. case MapCondition.Multiplied:
  159. double db3, db4;
  160. if (double.TryParse(drNewTarget[item.ColumnName].ToString(), out db3))
  161. {
  162. if (double.TryParse(item.Value.ToString(), out db4))
  163. drNewTarget[item.ColumnName] = db3 * db4;
  164. }
  165. break;
  166. case MapCondition.DecimalDigits:
  167. double db5;
  168. int count;
  169. if (double.TryParse(drNewTarget[item.ColumnName].ToString(), out db5))
  170. {
  171. if (int.TryParse(item.Value.ToString(), out count))
  172. drNewTarget[item.ColumnName] = Math.Round(db5, count);
  173. }
  174. break;
  175. case MapCondition.AddSubtract:
  176. ChangeAddSubtractConditonValue(syncInstrumentItem.lstFixedValue, item, dtReadySource, drSource, drNewTarget);
  177. break;
  178. }
  179. }
  180. }
  181. }
  182. catch (Exception ex)
  183. {
  184. AppLog.Error(ex.Message);
  185. }
  186. }
  187. private void ChangeStartEndSubStringConditonValue(CnasConditionMapValue item, DataRow drNewTarget)
  188. {
  189. try
  190. {
  191. if (item.Value != null && item.Value.ToString() != "")
  192. {
  193. string[] strValues = item.Value.ToString().Split(new string[] { "{", ",", "}" }, StringSplitOptions.RemoveEmptyEntries);
  194. if (strValues.Length == 2)
  195. {
  196. string[] strConfigValues = strValues[0].Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
  197. if (strValues[1] == "S")
  198. {
  199. //Regex reg = new Regex($"^[{strValues[0]}]");
  200. //if (reg.IsMatch(drNewTarget[item.ColumnName].ToString()))
  201. // drNewTarget[item.ColumnName] = drNewTarget[item.ColumnName].ToString().(0, drNewTarget[item.ColumnName].ToString().Length - 1);
  202. foreach (string strConfigValue in strConfigValues)
  203. {
  204. if (drNewTarget[item.ColumnName].ToString().StartsWith(strConfigValue))
  205. {
  206. drNewTarget[item.ColumnName] = drNewTarget[item.ColumnName].ToString().Substring(strConfigValue.Length, drNewTarget[item.ColumnName].ToString().Length - strConfigValue.Length);
  207. break;
  208. }
  209. }
  210. }
  211. else if (strValues[1] == "E")
  212. {
  213. //Regex reg = new Regex($"[{strValues[0]}]$");
  214. //if (reg.IsMatch(drNewTarget[item.ColumnName].ToString()))
  215. // drNewTarget[item.ColumnName] = drNewTarget[item.ColumnName].ToString().Substring(0, drNewTarget[item.ColumnName].ToString().Length-1);
  216. foreach (string strConfigValue in strConfigValues)
  217. {
  218. if (drNewTarget[item.ColumnName].ToString().EndsWith(strConfigValue))
  219. {
  220. drNewTarget[item.ColumnName] = drNewTarget[item.ColumnName].ToString().Substring(0, drNewTarget[item.ColumnName].ToString().Length - strConfigValue.Length);
  221. break;
  222. }
  223. }
  224. }
  225. }
  226. }
  227. }
  228. catch (Exception ex)
  229. {
  230. AppLog.Error(ex.Message);
  231. }
  232. }
  233. /// <summary>
  234. /// 处理SUB类型固定值
  235. /// </summary>
  236. /// <param name="item"></param>
  237. /// <param name="dtReadySource"></param>
  238. /// <param name="drSource"></param>
  239. /// <param name="drNewTarget"></param>
  240. private void ChangeSubConditionValue(CnasConditionMapValue item, DataTable dtReadySource, DataRow drSource, DataRow drNewTarget)
  241. {
  242. try
  243. {
  244. //解析Value值,如果不能解析,直接插入Value值
  245. if (item.Value != null && item.Value.ToString() != "")
  246. {
  247. string strInputValue = "";
  248. string[] strValues = item.Value.ToString().Split(new string[] { "+" }, StringSplitOptions.RemoveEmptyEntries);
  249. if (strValues.Length >= 1 && strValues.Length <= 3)
  250. {
  251. switch (strValues.Length)
  252. {
  253. case 1:
  254. string strColumnName1 = strValues[0].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  255. if (dtReadySource.Columns.Contains(strColumnName1))
  256. strInputValue = drSource[strColumnName1].ToString();
  257. else
  258. strInputValue = strValues[0];
  259. break;
  260. case 2:
  261. strColumnName1 = strValues[0].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  262. if (dtReadySource.Columns.Contains(strColumnName1))
  263. strInputValue = drSource[strColumnName1].ToString();
  264. else
  265. strInputValue = strValues[0];
  266. string strColumnName2 = strValues[1].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  267. if (dtReadySource.Columns.Contains(strColumnName2))
  268. strInputValue += drSource[strColumnName2].ToString();
  269. else
  270. strInputValue += strValues[1];
  271. break;
  272. case 3:
  273. strColumnName1 = strValues[0].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  274. if (dtReadySource.Columns.Contains(strColumnName1))
  275. strInputValue = drSource[strColumnName1].ToString();
  276. else
  277. strInputValue = strValues[0];
  278. strColumnName2 = strValues[1].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  279. if (dtReadySource.Columns.Contains(strColumnName2))
  280. strInputValue += drSource[strColumnName2].ToString();
  281. else
  282. strInputValue += strValues[1];
  283. string strColumnName3 = strValues[2].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  284. if (dtReadySource.Columns.Contains(strColumnName3))
  285. strInputValue += drSource[strColumnName3].ToString();
  286. else
  287. strInputValue += strValues[2];
  288. break;
  289. }
  290. }
  291. else
  292. {
  293. strInputValue = item.Value.ToString();
  294. }
  295. drNewTarget[item.ColumnName] = strInputValue;
  296. }
  297. }
  298. catch (Exception ex)
  299. {
  300. AppLog.Error(ex.Message);
  301. }
  302. }
  303. private bool SourceDataFilterOperation(DataRow dr)
  304. {
  305. //如果过滤器为空或没有任何条件,我们认为用户允许所有数据通过过滤审核
  306. if (syncInstrumentItem.SourceFilter == null) return true;
  307. if (syncInstrumentItem.SourceFilter.lstFilterConditions == null) return true;
  308. if (syncInstrumentItem.SourceFilter.lstFilterConditions.Count == 0) return true;
  309. bool bReturn = false;
  310. try
  311. {
  312. List<bool> lstMatch = new List<bool>();
  313. foreach (FilterCondition item in syncInstrumentItem.SourceFilter.lstFilterConditions)
  314. {
  315. bool bIsMatch = false;
  316. string strConditionValue = item.ConditionValue;
  317. if (strConditionValue == null) continue;
  318. if (strConditionValue.StartsWith("RegEx")) //此时使用正则表达式匹配
  319. {
  320. string[] strRegExs = strConditionValue.Split(new string[] { "RegEx:" }, StringSplitOptions.RemoveEmptyEntries);
  321. if (strRegExs.Length != 1) continue;
  322. bIsMatch = Regex.IsMatch(dr[item.ColumnName].ToString(), strRegExs[0]);
  323. }
  324. else
  325. {
  326. double result;
  327. double conditionresult;
  328. switch (item.Algorithm)
  329. {
  330. case "=":
  331. bIsMatch = dr[item.ColumnName].ToString() == item.ConditionValue ? true : false;
  332. break;
  333. case "<>":
  334. bIsMatch = dr[item.ColumnName].ToString() == item.ConditionValue ? false : true;
  335. break;
  336. case "like":
  337. bIsMatch = dr[item.ColumnName].ToString().Contains(item.ConditionValue) ? true : false;
  338. break;
  339. case "not like":
  340. bIsMatch = dr[item.ColumnName].ToString().Contains(item.ConditionValue) ? false : true;
  341. break;
  342. case ">":
  343. if (dr[item.ColumnName] != null)
  344. if (double.TryParse(dr[item.ColumnName].ToString(), out result) && double.TryParse(item.ConditionValue, out conditionresult))
  345. bIsMatch = result > conditionresult ? true : false;
  346. break;
  347. case "<":
  348. if (dr[item.ColumnName] != null)
  349. if (double.TryParse(dr[item.ColumnName].ToString(), out result) && double.TryParse(item.ConditionValue, out conditionresult))
  350. bIsMatch = result < conditionresult ? true : false;
  351. break;
  352. case ">=":
  353. if (dr[item.ColumnName] != null)
  354. if (double.TryParse(dr[item.ColumnName].ToString(), out result) && double.TryParse(item.ConditionValue, out conditionresult))
  355. bIsMatch = result >= conditionresult ? true : false;
  356. break;
  357. case "<=":
  358. if (dr[item.ColumnName] != null)
  359. if (double.TryParse(dr[item.ColumnName].ToString(), out result) && double.TryParse(item.ConditionValue, out conditionresult))
  360. bIsMatch = result <= conditionresult ? true : false;
  361. break;
  362. }
  363. }
  364. lstMatch.Add(bIsMatch);
  365. }
  366. if (syncInstrumentItem.SourceFilter.FilterConditionLinkType == "and")
  367. {
  368. //只要有一个为否,则返回否
  369. if (lstMatch.Where(x => x.Equals(false)).Count() > 0)
  370. bReturn = false;
  371. else
  372. bReturn = true;
  373. }
  374. else
  375. {
  376. //只要有一个为是,则返回是
  377. if (lstMatch.Where(x => x.Equals(true)).Count() > 0)
  378. bReturn = true;
  379. else
  380. bReturn = false;
  381. }
  382. }
  383. catch (Exception ex)
  384. {
  385. AppLog.Error(ex.Message);
  386. }
  387. return bReturn;
  388. }
  389. /// <summary>
  390. /// 处理IFThen类型固定值
  391. /// </summary>
  392. /// <param name="item"></param>
  393. /// <param name="dtReadySource"></param>
  394. /// <param name="drSource"></param>
  395. /// <param name="drNewTarget"></param>
  396. private void ChangeIFThenConditionValue(CnasConditionMapValue item, DataTable dtReadySource, DataRow drSource, DataRow drNewTarget)
  397. {
  398. try
  399. {
  400. if (item.Value != null && item.Value.ToString() != "")
  401. {
  402. List<IFThenConditionParams> lstParams = GlobalCommonOperation.AnanlysisIFThenString(item.Value.ToString());
  403. if (lstParams.Count > 0)
  404. {
  405. foreach (var conditionparams in lstParams)
  406. {
  407. if (!dtReadySource.Columns.Contains(conditionparams.ConditionColumnName)) continue;
  408. if (drSource[conditionparams.ConditionColumnName].ToString() == conditionparams.ConditionColumnValue)
  409. drNewTarget[item.ColumnName] = conditionparams.ColumnValue;
  410. }
  411. }
  412. }
  413. }
  414. catch (Exception ex)
  415. {
  416. AppLog.Error(ex.Message);
  417. }
  418. }
  419. /// <summary>
  420. /// 处理SubString类型固定值
  421. /// </summary>
  422. /// <param name="item"></param>
  423. /// <param name="dtReadySource"></param>
  424. /// <param name="drSource"></param>
  425. /// <param name="drNewTarget"></param>
  426. private void ChangeSubStringConditonValue(CnasConditionMapValue item, DataRow drNewTarget)
  427. {
  428. try
  429. {
  430. if (item.Value != null && item.Value.ToString() != "")
  431. {
  432. string[] strValues = item.Value.ToString().Split(new string[] { "{", ",", "}" }, StringSplitOptions.RemoveEmptyEntries);
  433. if (strValues.Length == 2)
  434. {
  435. string[] strInputValues = drNewTarget[item.ColumnName].ToString().Split(new string[] { strValues[0] }, StringSplitOptions.RemoveEmptyEntries);
  436. if (strInputValues.Length == 1)
  437. {
  438. drNewTarget[item.ColumnName] = strInputValues[0];
  439. }
  440. if (strInputValues.Length == 2) //只处理分割后有两部分的
  441. {
  442. if (strValues[1] == "L")
  443. {
  444. drNewTarget[item.ColumnName] = strInputValues[0];
  445. }
  446. else if (strValues[1] == "R")
  447. {
  448. drNewTarget[item.ColumnName] = strInputValues[1];
  449. }
  450. }
  451. }
  452. }
  453. }
  454. catch (Exception ex)
  455. {
  456. AppLog.Error(ex.Message);
  457. }
  458. }
  459. private void ChangeAddSubtractConditonValue(List<CnasConditionMapValue> lstConditionMaps, CnasConditionMapValue item, DataTable dtReadySource, DataRow drSource, DataRow drNewTarget)
  460. {
  461. try
  462. {
  463. if (item.Value != null && item.Value.ToString() != "")
  464. {
  465. string[] strValues = item.Value.ToString().Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries);
  466. if (strValues.Length == 3)
  467. {
  468. string strParam1 = strValues[0];
  469. string strParam2 = strValues[2];
  470. double db1, db2;
  471. string[] strParam1s = strParam1.Split(new string[] { "[", "]" }, StringSplitOptions.RemoveEmptyEntries);
  472. if (strParam1s.Length >= 1)
  473. {
  474. string[] strParam2s = strParam2.Split(new string[] { "[", "]" }, StringSplitOptions.RemoveEmptyEntries);
  475. if (strParam2s.Length >= 1)
  476. {
  477. if (dtReadySource.Columns.Contains(strParam1s[0]) && dtReadySource.Columns.Contains(strParam2s[0]))
  478. if (double.TryParse(drSource[strParam1s[0]].ToString(), out db1))
  479. {
  480. if (double.TryParse(drSource[strParam2s[0]].ToString(), out db2))
  481. {
  482. if (strParam1s.Length == 3)
  483. db1 = GetDividedMultipliedData(db1, strParam1s[1], strParam1s[2]);
  484. if (strParam2s.Length == 3)
  485. db2 = GetDividedMultipliedData(db2, strParam2s[1], strParam2s[2]);
  486. drNewTarget[item.ColumnName] = strValues[1].ToLower() == "subtract" ? db1 - db2 : db1 + db2;
  487. }
  488. }
  489. }
  490. }
  491. }
  492. }
  493. }
  494. catch (Exception ex)
  495. {
  496. AppLog.Error(ex.Message);
  497. }
  498. }
  499. /// <summary>
  500. /// 在计算数值相加和相减之前,如果计算的列已经有乘以或除以的操作,则先进行乘以或除以,再进行相加或相减
  501. /// </summary>
  502. /// <param name="lstConditionMaps"></param>
  503. /// <param name="drSource"></param>
  504. /// <param name="db1"></param>
  505. /// <param name="strColumnName"></param>
  506. /// <returns></returns>
  507. public double GetDividedMultipliedData(double db1, string strExpresstion, string strValue)
  508. {
  509. double db2;
  510. if (double.TryParse(strValue, out db2))
  511. {
  512. db1 = strExpresstion == "*" ? db1 * db2 : db1 / db2;
  513. }
  514. return db1;
  515. }
  516. /// <summary>
  517. /// 对准备插入的数据进行格式上的检查
  518. /// </summary>
  519. /// <param name="dtTarget"></param>
  520. /// <param name="strErrorMsg"></param>
  521. public void CheckInsertDataFormat(DataTable dtTarget, ref string strErrorMsg)
  522. {
  523. //检查数据合法性
  524. CnasDataCheck check = new CnasDataCheck
  525. {
  526. DtReadyInsert = dtTarget,
  527. TargetDataBase = syncInstrumentItem.SyncTargetDBInfo,
  528. StrTableName = syncInstrumentItem.LstSyncPramas[0].TargetTable
  529. };
  530. check.CheckData();
  531. if (check.LstIllegalMsg != null && check.LstIllegalMsg.Count > 0)
  532. {
  533. var item = syncInstrumentItem.LstSyncPramas.Where(s => s.TargetField == check.LstIllegalMsg[0].ColumnName).ToList<SyncParamasInfo>();
  534. if (item.Count == 1)
  535. {
  536. strErrorMsg = string.Format("数据不满足上传条件,请修改后再上传。错误数据:当前列名【{0}】,列值【{1}】", item[0].SourceField, check.LstIllegalMsg[0].ColumnValue);
  537. }
  538. else
  539. {
  540. strErrorMsg = string.Format("数据不满足上传条件,请修改后再上传。错误数据:CNAS列名【{0}】,列值【{1}】", check.LstIllegalMsg[0].ColumnName, check.LstIllegalMsg[0].ColumnValue);
  541. }
  542. return;
  543. }
  544. }
  545. /// <summary>
  546. /// 尝试将值插入到目标表单的各个行中
  547. /// </summary>
  548. /// <returns></returns>
  549. private string TestConvertValueToTarget(DataRow drTarget, DataRow drSource, string strTargetColumn, string strSourceColumn, string strDateColumn)
  550. {
  551. string strErrorMsg = "";
  552. try
  553. {
  554. if (strTargetColumn.ToLower() != strDateColumn.ToLower())
  555. {
  556. string strTargetColumnType = drTarget.Table.Columns[strTargetColumn].DataType.ToString();
  557. switch (strTargetColumnType)
  558. {
  559. case "System.Decimal":
  560. if (drSource[strSourceColumn] == null || (drSource[strSourceColumn] != null && drSource[strSourceColumn].ToString() == ""))
  561. drTarget[strTargetColumn] = 0;
  562. else
  563. drTarget[strTargetColumn] = Convert.ToDouble(drSource[strSourceColumn]);
  564. break;
  565. default:
  566. drTarget[strTargetColumn] = drSource[strSourceColumn];
  567. break;
  568. }
  569. }
  570. else //日期字段需要单独处理
  571. {
  572. DateTime dt = DateTime.Now;
  573. if (DateTime.TryParse(drSource[strSourceColumn].ToString(), out dt))
  574. {
  575. drTarget[strTargetColumn] = dt.ToString("yyyy-MM-dd HH:mm:ss");
  576. }
  577. else
  578. {
  579. drTarget[strTargetColumn] = drSource[strSourceColumn];
  580. }
  581. }
  582. }
  583. catch (Exception ex)
  584. {
  585. strErrorMsg = ex.Message;
  586. }
  587. return strErrorMsg;
  588. }
  589. }
  590. }