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.

652 lines
19 KiB

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