Mercurial > hg > ucis.core
comparison DBReader.cs @ 0:3ab940a0c7a0
Initial commit
author | Ivo Smits <Ivo@UCIS.nl> |
---|---|
date | Tue, 11 Sep 2012 16:28:53 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:3ab940a0c7a0 |
---|---|
1 using System; | |
2 using System.Collections; | |
3 using System.Collections.Generic; | |
4 using System.Data; | |
5 using System.Data.Common; | |
6 | |
7 namespace UCIS { | |
8 public class DBReader : IEnumerable, IEnumerator { | |
9 private IDbCommand _Command; | |
10 private IDataReader _Reader; | |
11 private object[] _CurrentRow; | |
12 | |
13 internal DBReader(IDbCommand Command) { | |
14 _Command = Command; | |
15 } | |
16 | |
17 public bool Read() { | |
18 if (_Reader == null) { | |
19 if (_Command == null) return false; | |
20 _Reader = _Command.ExecuteReader(); | |
21 } | |
22 if (_Reader.Read()) { | |
23 return true; | |
24 } else { | |
25 Close(); | |
26 return false; | |
27 } | |
28 } | |
29 | |
30 public void Close() { | |
31 if (_Reader != null) _Reader.Close(); | |
32 if (_Command != null) { | |
33 _Command.Connection.Close(); | |
34 _Command.Dispose(); | |
35 } | |
36 _Command = null; | |
37 _CurrentRow = null; | |
38 _Reader = null; | |
39 } | |
40 | |
41 public object GetField() { | |
42 if (_Reader == null) { | |
43 return _Command.ExecuteScalar(); | |
44 } else { | |
45 return _Reader.GetValue(0); | |
46 } | |
47 } | |
48 | |
49 public object GetField(int Offset) { | |
50 if (_Reader == null) Read(); | |
51 return _Reader.GetValue(Offset); | |
52 } | |
53 public object[] GetRow(bool GoNextRow) { | |
54 object[] Result = null; | |
55 if (_Reader == null) { | |
56 if (!Read()) return null; | |
57 } | |
58 Result = new object[_Reader.FieldCount]; | |
59 | |
60 _Reader.GetValues(Result); | |
61 if (GoNextRow) Read(); | |
62 return Result; | |
63 } | |
64 public object[] GetRow() { | |
65 return GetRow(true); | |
66 } | |
67 public object[][] GetAllRows() { | |
68 List<object[]> Result = new List<object[]>(); | |
69 object[] ResultArray = null; | |
70 if (_Reader == null) { | |
71 if (!Read()) return null; | |
72 } | |
73 do { | |
74 ResultArray = new object[_Reader.FieldCount]; | |
75 | |
76 _Reader.GetValues(ResultArray); | |
77 Result.Add(ResultArray); | |
78 } | |
79 while (_Reader.Read()); | |
80 Close(); | |
81 return Result.ToArray(); | |
82 } | |
83 | |
84 IEnumerator IEnumerable.GetEnumerator() { | |
85 return this; | |
86 } | |
87 object IEnumerator.Current { | |
88 get { return _CurrentRow; } | |
89 } | |
90 bool IEnumerator.MoveNext() { | |
91 if (!Read()) return false; | |
92 _CurrentRow = GetRow(false); | |
93 return true; | |
94 } | |
95 void IEnumerator.Reset() { | |
96 throw new NotImplementedException(); | |
97 } | |
98 | |
99 public void Dispose() { | |
100 Close(); | |
101 } | |
102 } | |
103 } |