AdoDataReader.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Data.OleDb;
  5. using Tofly.Data.General;
  6. using System.Data.Common;
  7. namespace Tofly.Data.ADO
  8. {
  9. /// <summary>
  10. /// 定义Ado的oledb类型数据读取对象
  11. /// </summary>
  12. public class AdoDataReader : IDataReader
  13. {
  14. private DbDataReader pReader;
  15. private IRow pRow;
  16. private IWorkspace workspace = null;
  17. public AdoDataReader(DbDataReader pReader,IWorkspace workspace)
  18. {
  19. if (pReader == null)
  20. throw new Exception();
  21. if (workspace == null)
  22. throw new Exception();
  23. this.pReader = pReader;
  24. this.workspace = workspace;
  25. }
  26. /// <summary>
  27. /// 获取当前行
  28. /// </summary>
  29. public IRow Row
  30. {
  31. get
  32. {
  33. return pRow;
  34. }
  35. }
  36. /// <summary>
  37. /// 将读取器前进到结果集中的下一个记录
  38. /// </summary>
  39. /// <returns></returns>
  40. public bool Read()
  41. {
  42. if (pReader.Read())
  43. {
  44. pRow = new RowBase();
  45. Dictionary<string, object> oValue = new Dictionary<string, object>();
  46. Type type;
  47. object temp = null;
  48. for (int i = 0; i < pReader.FieldCount; i++)
  49. {
  50. type = pReader.GetFieldType(i);
  51. string sss = pReader.GetName(i);
  52. if (type == typeof(System.DateTime) && workspace.WorkspaceType == WorkspaceType.SqlLite)
  53. {
  54. temp = null;
  55. if (!pReader.IsDBNull(i))
  56. {
  57. temp = pReader.GetString(i);
  58. DateTime time;
  59. bool success = DateTime.TryParse(temp.ToString(), out time);
  60. if (success)
  61. temp = time;
  62. else
  63. temp = null;
  64. }
  65. oValue.Add(pReader.GetName(i).ToUpper().Trim(), temp);
  66. }
  67. else
  68. oValue.Add(pReader.GetName(i).ToUpper().Trim(), pReader.GetValue(i));
  69. }
  70. pRow.OriginalObjects = oValue;
  71. return true;
  72. }
  73. else
  74. {
  75. return false;
  76. }
  77. }
  78. #region IDisposable
  79. private bool disposed = false;
  80. public void Dispose()
  81. {
  82. Dispose(true);
  83. GC.SuppressFinalize(this);
  84. }
  85. private void Dispose(bool disposing)
  86. {
  87. if (!this.disposed)
  88. {
  89. pReader.Dispose();
  90. pReader = null;
  91. }
  92. disposed = true;
  93. }
  94. ~AdoDataReader()
  95. {
  96. Dispose(false);
  97. }
  98. #endregion
  99. }
  100. }