You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

683 lines
20 KiB

4 years ago
  1. using Common.Utility;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Configuration;
  6. using System.Data;
  7. using System.Data.SqlClient;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Web;
  12. using System.Web.Script.Serialization;
  13. namespace Repository.DAO
  14. {
  15. public class RemittanceDao
  16. {
  17. private SqlConnection _connection;
  18. public RemittanceDao()
  19. {
  20. Init();
  21. }
  22. private void Init()
  23. {
  24. _connection = new SqlConnection(GetConnectionString());
  25. }
  26. private void OpenConnection()
  27. {
  28. if (_connection.State == ConnectionState.Open)
  29. _connection.Close();
  30. _connection.Open();
  31. }
  32. private void CloseConnection()
  33. {
  34. if (_connection.State == ConnectionState.Open)
  35. this._connection.Close();
  36. }
  37. private string GetConnectionString()
  38. {
  39. return ConfigurationManager.ConnectionStrings["dbConnection"].ConnectionString;
  40. }
  41. public DataSet ExecuteDataset(string sql)
  42. {
  43. var ds = new DataSet();
  44. SqlDataAdapter da;
  45. try
  46. {
  47. OpenConnection();
  48. da = new SqlDataAdapter(sql, _connection);
  49. da.SelectCommand.CommandTimeout = 230;
  50. da.Fill(ds);
  51. da.Dispose();
  52. CloseConnection();
  53. }
  54. catch (Exception ex)
  55. {
  56. throw ex;
  57. }
  58. finally
  59. {
  60. da = null;
  61. CloseConnection();
  62. }
  63. return ds;
  64. }
  65. public DataTable ExecuteDataTable(string sql)
  66. {
  67. using (var ds = ExecuteDataset(sql))
  68. {
  69. if (ds == null || ds.Tables.Count == 0)
  70. return null;
  71. return ds.Tables[0];
  72. }
  73. }
  74. public DataRow ExecuteDataRow(string sql)
  75. {
  76. using (var ds = ExecuteDataset(sql))
  77. {
  78. if (ds == null || ds.Tables.Count == 0)
  79. return null;
  80. if (ds.Tables[0].Rows.Count == 0)
  81. return null;
  82. return ds.Tables[0].Rows[0];
  83. }
  84. }
  85. public String GetSingleResult(string sql)
  86. {
  87. try
  88. {
  89. var ds = ExecuteDataset(sql);
  90. if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
  91. return "";
  92. return ds.Tables[0].Rows[0][0].ToString();
  93. }
  94. catch (Exception ex)
  95. {
  96. throw ex;
  97. }
  98. finally
  99. {
  100. CloseConnection();
  101. }
  102. }
  103. public String FilterStringForXml(string strVal)
  104. {
  105. var str = FilterQuote(strVal);
  106. if (str.ToLower() == "null")
  107. str = "";
  108. //str = "'" + str + "'";
  109. return str;
  110. }
  111. public String FilterString(string strVal)
  112. {
  113. var str = FilterQuote(strVal);
  114. if (str.ToLower() != "null")
  115. str = "'" + str + "'";
  116. return str;
  117. }
  118. public String FilterAmpersand(string strVal)
  119. {
  120. if (string.IsNullOrEmpty(strVal))
  121. {
  122. strVal = "";
  123. }
  124. var str = strVal/*.Trim()*/;
  125. if (!string.IsNullOrEmpty(str))
  126. {
  127. str = str.Replace("&amp", "&");
  128. }
  129. return str;
  130. }
  131. public String FilterStringUnicode(string strVal)
  132. {
  133. var str = FilterQuote(strVal);
  134. if (str.ToLower() != "null")
  135. str = "N'" + str + "'";
  136. return str;
  137. }
  138. public String FilterQuoteNative(string strVal)
  139. {
  140. if (string.IsNullOrEmpty(strVal))
  141. {
  142. strVal = "";
  143. }
  144. var str = Encode(strVal.Trim());
  145. if (!string.IsNullOrEmpty(str))
  146. {
  147. str = str.Replace(";", "");
  148. //str = str.Replace(",", "");
  149. str = str.Replace("--", "");
  150. str = str.Replace("'", "");
  151. str = str.Replace("/*", "");
  152. str = str.Replace("*/", "");
  153. str = str.Replace(" select ", "");
  154. str = str.Replace(" insert ", "");
  155. str = str.Replace(" update ", "");
  156. str = str.Replace(" delete ", "");
  157. str = str.Replace(" drop ", "");
  158. str = str.Replace(" truncate ", "");
  159. str = str.Replace(" create ", "");
  160. str = str.Replace(" begin ", "");
  161. str = str.Replace(" end ", "");
  162. str = str.Replace(" char(", "");
  163. str = str.Replace(" exec ", "");
  164. str = str.Replace(" xp_cmd ", "");
  165. str = str.Replace("<script", "");
  166. }
  167. else
  168. {
  169. str = "null";
  170. }
  171. return str;
  172. }
  173. private string Encode(string strVal)
  174. {
  175. var sb = new StringBuilder(HttpUtility.HtmlEncode(HttpUtility.JavaScriptStringEncode(strVal)));
  176. // Selectively allow <b> and <i>
  177. sb.Replace("&lt;b&gt;", "<b>");
  178. sb.Replace("&lt;/b&gt;", "");
  179. sb.Replace("&lt;i&gt;", "<i>");
  180. sb.Replace("&lt;/i&gt;", "");
  181. return sb.ToString();
  182. }
  183. public String FilterStringNativeTrim(string strVal)
  184. {
  185. var str = FilterQuoteNative(strVal);
  186. if (str.ToLower() != "null")
  187. str = "'" + str + "'";
  188. else
  189. str = "";
  190. return str;
  191. }
  192. public String FilterStringNative(string strVal)
  193. {
  194. var str = FilterQuoteNative(strVal);
  195. if (str.ToLower() != "null")
  196. str = "'" + str + "'";
  197. return str;
  198. }
  199. public string SingleQuoteToDoubleQuote(string strVal)
  200. {
  201. strVal = strVal.Replace("\"", "");
  202. return strVal.Replace("'", "\"");
  203. }
  204. public String FilterQuote(string strVal)
  205. {
  206. if (string.IsNullOrEmpty(strVal))
  207. {
  208. strVal = "";
  209. }
  210. var str = strVal/*.Trim()*/;
  211. if (!string.IsNullOrEmpty(str))
  212. {
  213. str = str.Replace(";", "");
  214. //str = str.Replace(",", "");
  215. str = str.Replace("--", "");
  216. str = str.Replace("'", "");
  217. str = str.Replace("/*", "");
  218. str = str.Replace("*/", "");
  219. str = str.Replace(" select ", "");
  220. str = str.Replace(" insert ", "");
  221. str = str.Replace(" update ", "");
  222. str = str.Replace(" delete ", "");
  223. str = str.Replace(" drop ", "");
  224. str = str.Replace(" truncate ", "");
  225. str = str.Replace(" create ", "");
  226. str = str.Replace(" begin ", "");
  227. str = str.Replace(" end ", "");
  228. str = str.Replace(" char(", "");
  229. str = str.Replace(" exec ", "");
  230. str = str.Replace(" xp_cmd ", "");
  231. str = str.Replace("<script", "");
  232. }
  233. else
  234. {
  235. str = "null";
  236. }
  237. return str;
  238. }
  239. public DbResult ParseDbResultV2(string sql)
  240. {
  241. return ParseDbResult(ExecuteDatasetV2(sql).Tables[0]);
  242. }
  243. public DataSet ExecuteDatasetV2(string sql)
  244. {
  245. var ds = new DataSet();
  246. using (var _connection = new SqlConnection(GetConnectionString()))
  247. {
  248. using (var cmd = new SqlCommand(sql, _connection))
  249. {
  250. cmd.CommandTimeout = GetCommandTimeOut();
  251. SqlDataAdapter da;
  252. try
  253. {
  254. //OpenConnection();
  255. da = new SqlDataAdapter(cmd);
  256. da.Fill(ds);
  257. da.Dispose();
  258. //CloseConnection();
  259. }
  260. catch (Exception ex)
  261. {
  262. throw ex;
  263. }
  264. finally
  265. {
  266. da = null;
  267. //cmd.Dispose();
  268. //CloseConnection();
  269. }
  270. }
  271. }
  272. return ds;
  273. }
  274. private int GetCommandTimeOut()
  275. {
  276. int cto = 0;
  277. try
  278. {
  279. int.TryParse(ConfigurationSettings.AppSettings["eto"].ToString(), out cto);
  280. if (cto == 0)
  281. cto = 30;
  282. }
  283. catch (Exception)
  284. {
  285. cto = 30;
  286. }
  287. return cto;
  288. }
  289. public DbResult ParseDbResult(DataTable dt)
  290. {
  291. var res = new DbResult();
  292. if (dt.Rows.Count > 0)
  293. {
  294. res.ErrorCode = dt.Rows[0][0].ToString();
  295. res.Msg = dt.Rows[0][1].ToString();
  296. res.Id = dt.Rows[0][2].ToString();
  297. }
  298. if (dt.Columns.Count > 3)
  299. {
  300. res.Extra = dt.Rows[0][3].ToString();
  301. }
  302. if (dt.Columns.Count > 4)
  303. {
  304. res.Extra2 = dt.Rows[0][4].ToString();
  305. }
  306. if (dt.Columns.Count > 5)
  307. {
  308. res.Extra2 = dt.Rows[0][5].ToString();
  309. }
  310. return res;
  311. }
  312. public DbResult ParseDbResult(string sql)
  313. {
  314. return ParseDbResult(ExecuteDataset(sql).Tables[0]);
  315. }
  316. public DataTable GetTable2(string sql)
  317. {
  318. return ExecuteDataset(sql).Tables[1];
  319. }
  320. protected string ParseData(string data)
  321. {
  322. return data.Replace("\"", "").Replace("'", "").Trim();
  323. }
  324. public string AutoSelect(string str1, string str2)
  325. {
  326. if (str1.ToLower() == str2.ToLower())
  327. return "selected=\"selected\"";
  328. return "";
  329. }
  330. protected string ParseDate(string data)
  331. {
  332. data = FilterString(data);
  333. if (data.ToUpper() == "NULL")
  334. return data;
  335. data = data.Replace("'", "");
  336. var dateParts = data.Split('/');
  337. if (dateParts.Length < 3)
  338. return "NULL";
  339. var m = dateParts[0];
  340. var d = dateParts[1];
  341. var y = dateParts[2];
  342. return "'" + y + "-" + (m.Length == 1 ? "0" + m : m) + "-" + (d.Length == 1 ? "0" + d : d) + "'";
  343. }
  344. public DataTable GetTable(string sql)
  345. {
  346. var ds = new DataSet();
  347. SqlDataAdapter da;
  348. try
  349. {
  350. OpenConnection();
  351. da = new SqlDataAdapter(sql, _connection);
  352. da.Fill(ds);
  353. da.Dispose();
  354. CloseConnection();
  355. }
  356. catch (Exception ex)
  357. {
  358. throw ex;
  359. }
  360. finally
  361. {
  362. da = null;
  363. CloseConnection();
  364. }
  365. return ds.Tables[0];
  366. }
  367. public void ExecuteProcedure(string spName, SqlParameter[] param)
  368. {
  369. try
  370. {
  371. OpenConnection();
  372. SqlCommand command = new SqlCommand(spName, _connection);
  373. command.CommandType = CommandType.StoredProcedure;
  374. foreach (SqlParameter p in param)
  375. {
  376. command.Parameters.Add(p);
  377. }
  378. command.ExecuteNonQuery();
  379. }
  380. catch (Exception ex)
  381. {
  382. throw ex;
  383. }
  384. finally
  385. {
  386. CloseConnection();
  387. }
  388. }
  389. public string DataTableToText(ref DataTable dt, string delemeter, Boolean includeColHeader)
  390. {
  391. var sb = new StringBuilder();
  392. var del = "";
  393. var rowcnt = 0;
  394. if (includeColHeader)
  395. {
  396. foreach (DataColumn col in dt.Columns)
  397. {
  398. sb.Append(del);
  399. sb.Append(col.ColumnName);
  400. del = delemeter;
  401. }
  402. rowcnt++;
  403. }
  404. foreach (DataRow row in dt.Rows)
  405. {
  406. if (rowcnt > 0)
  407. {
  408. sb.AppendLine();
  409. }
  410. del = "";
  411. foreach (DataColumn col in dt.Columns)
  412. {
  413. sb.Append(del);
  414. sb.Append(row[col.ColumnName].ToString());
  415. del = delemeter;
  416. }
  417. rowcnt++;
  418. }
  419. return sb.ToString();
  420. }
  421. public string DataTableToText(ref DataTable dt, string delemeter)
  422. {
  423. return DataTableToText(ref dt, delemeter, true);
  424. }
  425. public string DataTableToHTML(ref DataTable dt, Boolean includeColHeader)
  426. {
  427. var sb = new StringBuilder("<table>");
  428. if (includeColHeader)
  429. {
  430. sb.AppendLine("<tr>");
  431. foreach (DataColumn col in dt.Columns)
  432. {
  433. sb.Append("<th>" + col.ColumnName + "</th>");
  434. }
  435. sb.AppendLine("</tr>");
  436. }
  437. foreach (DataRow row in dt.Rows)
  438. {
  439. sb.AppendLine("<tr>");
  440. foreach (DataColumn col in dt.Columns)
  441. {
  442. sb.Append("<td>" + row[col.ColumnName].ToString() + "</td>");
  443. }
  444. sb.AppendLine("</tr>");
  445. }
  446. sb.AppendLine("</table>");
  447. return sb.ToString();
  448. }
  449. public string DataTableToHTML(ref DataTable dt)
  450. {
  451. return DataTableToHTML(ref dt, true);
  452. }
  453. public DbResult TryParseSQL(string sql)
  454. {
  455. var dr = new DbResult();
  456. try
  457. {
  458. OpenConnection();
  459. using (SqlCommand command = new SqlCommand())
  460. {
  461. command.Connection = _connection;
  462. command.CommandType = CommandType.Text;
  463. command.CommandText = "SET NOEXEC ON " + sql + " SET NOEXEC OFF"; ;
  464. command.ExecuteNonQuery();
  465. dr.ErrorCode = "0";
  466. dr.Msg = "Success";
  467. }
  468. return dr;
  469. }
  470. catch (Exception ex)
  471. {
  472. dr.ErrorCode = "1";
  473. dr.Msg = FilterQuote(ex.Message);
  474. return dr;
  475. }
  476. finally
  477. {
  478. CloseConnection();
  479. }
  480. }
  481. public DataTable DecodeLogData(DataTable logTable)
  482. {
  483. var data = GetDataTemplete(logTable);
  484. if (string.IsNullOrWhiteSpace(data))
  485. {
  486. return null;
  487. }
  488. var fieldList = new ArrayList();
  489. fieldList.Add("Table");
  490. fieldList.Add("ChangedDate");
  491. fieldList.Add("ChangedBy");
  492. fieldList.Add("ChangedType");
  493. fieldList.Add("DataID");
  494. var dt = CreateDataTableFromLogData(data, fieldList);
  495. foreach (DataRow row in logTable.Rows)
  496. {
  497. DataRow newRow = dt.NewRow();
  498. newRow["Table"] = row["tableName"].ToString();
  499. newRow["ChangedDate"] = row["createdDate"].ToString();
  500. newRow["ChangedBy"] = row["createdBy"].ToString();
  501. newRow["ChangedType"] = row["logType"].ToString();
  502. newRow["DataID"] = row["dataId"].ToString();
  503. CreateDataRowFromLogData(ref newRow, row["newData"].ToString());
  504. dt.Rows.Add(newRow);
  505. }
  506. return dt;
  507. }
  508. public string DataTableToJson(DataTable table)
  509. {
  510. if (table == null)
  511. return "";
  512. var list = new List<Dictionary<string, object>>();
  513. foreach (DataRow row in table.Rows)
  514. {
  515. var dict = new Dictionary<string, object>();
  516. foreach (DataColumn col in table.Columns)
  517. {
  518. dict[col.ColumnName] = string.IsNullOrEmpty(row[col].ToString()) ? "" : row[col];
  519. }
  520. list.Add(dict);
  521. }
  522. var serializer = new JavaScriptSerializer();
  523. string json = serializer.Serialize(list);
  524. return json;
  525. }
  526. #region Helper
  527. private string GetDataTemplete(DataTable dt)
  528. {
  529. var data = "";
  530. foreach (DataRow row in dt.Rows)
  531. {
  532. data = row["OldData"].ToString();
  533. if (string.IsNullOrWhiteSpace(data))
  534. {
  535. data = row["OldData"].ToString();
  536. }
  537. if (!string.IsNullOrWhiteSpace(data))
  538. {
  539. return data;
  540. }
  541. }
  542. return data;
  543. }
  544. private DataTable CreateDataTableFromLogData(string data, ArrayList defaultFields)
  545. {
  546. var dt = new DataTable();
  547. foreach (var fld in defaultFields)
  548. {
  549. dt.Columns.Add(fld.ToString());
  550. }
  551. var stringSeparators = new[] { "-:::-" };
  552. var dataList = data.Split(stringSeparators, StringSplitOptions.None);
  553. const string seperator = "=";
  554. foreach (var itm in dataList)
  555. {
  556. var seperatorPos = itm.IndexOf(seperator);
  557. if (seperatorPos > -1)
  558. {
  559. var field = itm.Substring(0, seperatorPos - 1).Trim();
  560. dt.Columns.Add(field);
  561. }
  562. }
  563. return dt;
  564. }
  565. private void CreateDataRowFromLogData(ref DataRow row, string data)
  566. {
  567. var stringSeparators = new[] { "-:::-" };
  568. var dataList = data.Split(stringSeparators, StringSplitOptions.None);
  569. const string seperator = "=";
  570. foreach (var itm in dataList)
  571. {
  572. var seperatorPos = itm.IndexOf(seperator);
  573. if (seperatorPos > -1)
  574. {
  575. var field = itm.Substring(0, seperatorPos - 1).Trim();
  576. var value = itm.Substring(seperatorPos + 1).Trim();
  577. row[field] = value;
  578. }
  579. }
  580. }
  581. public DataTable getTable(string sql)
  582. {
  583. return ExecuteDataTable(sql);
  584. }
  585. #endregion Helper
  586. }
  587. }