1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
|
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Data.Common;
namespace SimpleDb
{
/// <summary>
/// Ein Klasse zum Speichern einer Zeile aus einer Datenbankabfrage.
/// Der Zugriff auf die Daten erfolgt über einen Index in Form einer Zeichenkette.
/// </summary>
public class SimpleDbObject
{
/// <summary>
/// Speichert die Feldnamen und dazugehörige Werte
/// </summary>
private Hashtable m_Data;
/// <summary>
/// Erzeugt ein leeres SimpleDbObject
/// </summary>
public SimpleDbObject()
{
m_Data = new Hashtable();
}
/// <summary>
/// Gibt den Inhalt des Feldes mit der Bezeichnung fieldName zurück oder setzt ihn.
/// </summary>
/// <param name="fieldName">Der Feldname, der angesprochen werden soll</param>
/// <returns>Ein object, wenn es Daten zum gesuchten Feldnamen gibt oder NULL,
/// wenn das Feld nicht existiert oder der gespeicherte Wert in der Datenbank NULL ist</returns>
public object this[string fieldName]
{
get
{
object data = m_Data[fieldName.ToUpper()];
if (data != null)
{
if (data == DBNull.Value)
{
return null;
}
return data;
}
return null;
}
set
{
m_Data[fieldName] = value;
}
}
/// <summary>
/// Fragt ab, ob das ein bestimmtes Feld existiert
/// </summary>
/// <param name="fieldName">Der Feldname, dessen Existenz gesucht werden soll</param>
/// <returns>TRUE, wenn das Feld existiert, sonst FALSE</returns>
public bool FieldExists(string fieldName)
{
return m_Data.ContainsKey(fieldName.ToUpper());
}
/// <summary>
/// Gibt eine ICollection zurück, die alle Feldnamen enthält
/// </summary>
public ICollection FieldNames
{
get
{
return m_Data.Keys;
}
}
}
/// <summary>
/// Eine Klasse zum Speichern von mehreren SimpleDbObjects.
/// </summary>
public class SimpleDbObjectList : ArrayList
{
/// <summary>
/// Erzeugt eine neue leere SimpleDbObjectList
/// </summary>
public SimpleDbObjectList()
{
}
/// <summary>
/// Erzeugt eine neue SimepleDbObjectList und liest dabei ein komplettes Abfrageergebnis ein
/// </summary>
/// <param name="reader">Ein DbDataReader der durch DbCommand.ExecuteReader() erstellt wurde.</param>
/// <exception cref="SimpleDb.SimpleDbException">Tritt ein, wenn ein Fehler beim Lesen aus dem DbDataReader auftritt</exception>
public SimpleDbObjectList(DbDataReader reader)
{
try
{
while (reader.Read())
{
SimpleDbObject obj = NewObject();
// Felder durchiterieren und Inhalte im Hashtable speichern
for (int iFieldPosition = 0; iFieldPosition < reader.FieldCount; iFieldPosition++)
{
obj[reader.GetName(iFieldPosition).ToUpper()] = reader[iFieldPosition];
}
this.Add(obj);
}
}
catch (Exception ex)
{
throw new SimpleDbException("Fehler beim Aufbau der Liste.\nMeldung der Datenbankschnittstelle:\n" + ex.Message, ex);
}
}
/// <summary>
/// Gibt eine neue Instanz eines SimpleDbObjects zurück.
/// Diese Methode muss von abgeleiteten Klassen überschrieben werden
/// </summary>
/// <returns>neues SimpleDbObject</returns>
public virtual SimpleDbObject NewObject()
{
return new SimpleDbObject();
}
/// <summary>
/// Fügt der Liste ein neues SimpleDbObject hinzu
/// </summary>
/// <param name="dataRow">Das SimpleDbObject, dass der Liste hinzugefügt werden soll</param>
public void Add(SimpleDbObject dataRow)
{
base.Add(dataRow);
}
/// <summary>
/// Gibt das Objekt an einer bestimmten Position zurück
/// </summary>
/// <param name="position">Der null-basierte Index, an dem das SimpleDbObject zurückgegeben werden soll</param>
/// <returns>Das Objekt an der gewünschten Position</returns>
public SimpleDbObject GetAt(int position)
{
return (SimpleDbObject)this[position];
}
}
/// <summary>
/// Stellt Fehler dar die beim Verwenden der SimpleDb-Klassen auftreten können
/// </summary>
public class SimpleDbException : Exception
{
/// <summary>
/// Erzeugt eine neue SimpleDbException und legt den Meldungstext fest
/// </summary>
/// <param name="message">Der Meldungstext der Exception</param>
public SimpleDbException(string message)
: base(message)
{
}
/// <summary>
/// Erzeugt eine neue SimpleDbException und legt den Meldungstext und die
/// Exception der Fehlerursache fest.
/// </summary>
/// <param name="message">Der Meldungstext der Exception</param>
/// <param name="innerException">Die Exception die der Grund für diese Exception ist oder NULL, wenn keine Exception voraus ging</param>
public SimpleDbException(string message, Exception innerException)
: base(message, innerException)
{
}
}
}
|