DbHelper.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using ADODB;
  5. using System.Reflection;
  6. namespace ZLPlugin_LisPacs_MR.Domain.Units
  7. {
  8. class DbHelper
  9. {
  10. /// <summary>
  11. /// 执行SQL,返回DataTable对象
  12. /// </summary>
  13. /// <param name="con">数据库连接对象</param>
  14. /// <param name="sql">SQL语句</param>
  15. /// <param name="isThrowNullQuery">数据为空是否抛异常</param>
  16. /// <returns></returns>
  17. public static DataTable ExcuteSql(string sql, Connection con, bool isThrowNullQuery = true)
  18. {
  19. Recordset recordset = new Recordset();
  20. recordset.Open(sql, con);
  21. if (recordset.BOF || recordset.EOF)
  22. if (isThrowNullQuery)
  23. throw new ArgumentException("查询无数据");
  24. else return null;
  25. recordset.MoveFirst();
  26. DataTable dt = new DataTable();
  27. for (int i = 0; i < recordset.Fields.Count; i++)
  28. dt.Columns.Add(recordset.Fields[i].Name, typeof(string));
  29. while (!recordset.EOF)
  30. {
  31. var row = dt.NewRow();
  32. for (int i = 0; i < recordset.Fields.Count; i++)
  33. row[i] = recordset.Fields[i].Value.ToString();
  34. recordset.MoveNext();
  35. dt.Rows.Add(row);
  36. }
  37. return dt;
  38. }
  39. /// <summary>
  40. /// 执行SQL,返回实体对象
  41. /// </summary>
  42. /// <typeparam name="T">对象实体</typeparam>
  43. /// <param name="sql">SQL语句</param>
  44. /// <param name="con">数据库连接对象</param>
  45. /// <returns></returns>
  46. public static List<T> ExcuteSql<T>(string sql, Connection con, params string[] pars) where T : new()
  47. {
  48. Recordset recordset = new Recordset();
  49. for (int i = 0; i < pars.Length; i++)
  50. sql = sql.Replace(":" + i, pars[i]);
  51. recordset.Open(sql, con);
  52. if (recordset.BOF || recordset.EOF)
  53. return null;
  54. recordset.MoveFirst();
  55. var revals = new List<T>();
  56. while (!recordset.EOF)
  57. {
  58. var row = new T();
  59. foreach (PropertyInfo prop in row.GetType().GetProperties())
  60. {
  61. try
  62. {
  63. if (recordset.Fields[prop.Name] != null)
  64. prop.SetValue(row, recordset.Fields[prop.Name].Value, null);
  65. }
  66. catch { continue; }
  67. }
  68. revals.Add(row);
  69. recordset.MoveNext();
  70. }
  71. recordset.Close();
  72. return revals;
  73. }
  74. /// <summary>
  75. /// 获取单个结果
  76. /// </summary>
  77. /// <param name="sql">SQL语句</param>
  78. /// <param name="con">数据库连接对象</param>
  79. /// <param name="pars">sql参数,sql语句中以 :0 开始进行参数替换</param>
  80. /// <returns></returns>
  81. public static object GetSingleValue(string sql, ADODB.Connection con, params string[] pars)
  82. {
  83. Recordset recordset = new Recordset();
  84. for (int i = 0; i < pars.Length; i++)
  85. sql = sql.Replace(":" + i, pars[i]);
  86. recordset.Open(sql, con);
  87. if (recordset.BOF || recordset.EOF)
  88. return null;
  89. recordset.MoveFirst();
  90. return recordset.Fields[0].Value;
  91. }
  92. }
  93. }