Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - ColumnIndizes einer Tabelle sauber ablegen
thas11 - Di 08.03.11 18:03
Titel: ColumnIndizes einer Tabelle sauber ablegen
Ich habe z.B eine AcessTabelle(TestTabelle) und die hat folgende Spalten
ID|NAME|DESCRIPTION|TAG|DATE
Ich lese die Daten aus dieser Tabelle mit dem OleDBDataReader
Beispielcode
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Private const int COL_ID = 0; Private const int COL_NAME = 1; Private const int COL_DESC = 2; Private const int COL_TAG = 3; Private const int COL_DATE = 4;
...
OldeDdDataReader readData = new OleDbCommand("SELECT * FROM Testtabelle",cConnection).ExecuteReader(); while(readData.Read() == true) { Debug.Print(readData[COL_NAME].ToString());
} |
Nun meine Frage:
Gibt es in C# eine elegantere Lösung meine ColumnIndizes abzuspeichern als über Konstanten?
Danke & lg,
Wolfi
Kha - Di 08.03.11 18:14
:welcome: in der EE!
In einem richtigen Projekt würde niemand mit einem DataReader arbeiten, aber das war ja anscheinend nicht die Frage :) : Für solche Konstanten bieten sich enums an, deren Werte entweder implizit von 0 an hochgezählt oder explizit festgelegt werden. An den Wert kommst du dann per Cast nach int, weitere Informationen findest du in der Hilfe.
thas11 - Di 08.03.11 18:33
Hallo!
Erst mal danke für die rasche Antwort!
Mit Enums hab ichs schon probiert aber dann das ganze wieder auf einen int zu Casten finde ich auch nicht wirklich elegant....
Nun hab ich meine Konstanten in eine struct gepackt. Was halten erfahrene C# Programmierer davon?
Was spricht gegen einen DataReader? Ich Hantiere mit sehr großen Datenmengen und da erscheint mir der DataReader nicht unvernünftig, da ich nicht alle Daten auf einmal in den Speicher lese sondern kann Datenreihe für Datenreihe durchiterieren... Aber falls du mir etwas besseres empfiehlst bin ich dir natürlich dankbar
mfg & Danke,
Wolfi
Kha - Di 08.03.11 19:41
thas11 hat folgendes geschrieben : |
Nun hab ich meine Konstanten in eine struct gepackt. |
Was ändert das? Wenn es dir nur um einen gemeinsamen Präfix wie Columns.Id geht, wäre eine statische Klasse passender.
thas11 hat folgendes geschrieben : |
Was spricht gegen einen DataReader? Ich Hantiere mit sehr großen Datenmengen und da erscheint mir der DataReader nicht unvernünftig |
Ok, solche Bulk Data Operations sind das einzige, was heutzutage noch gegen DataSets/ORMs spricht :) .
thas11 - Di 08.03.11 20:30
Hallo Sebastian!
Abermals danke für deine Antwort.
Da ich natürlich auch was dazulernen möchte, würde mich interessieren warum eine statische Klasse passender ist als eine Struct?
Danke & lg,
Wolfi
Kha - Di 08.03.11 20:42
Wie gesagt,
falls du das so meintest:
C#-Quelltext
1: 2: 3: 4:
| struct Columns { public const int Id = 0; ... } |
dann frage dich, wofür du Instanzen dieses Structs benötigst ;) .
thas11 - Di 08.03.11 20:58
Hi Sebastian!
Wie du schon richtig vermutet hast geht es mir im eine gemeinsame Präfix ;) , da ich einige Tabellen habe und ich damit eine bessere Übersichtlichkeit bekomme...
Ich verstehe nicht was dann der Vorteil einer statischen Klasse wäre... Kommt ja auf dasselbe oder irre ich mich ???
Danke & lg,
Wolfi
Kha - Mi 09.03.11 00:31
Ich weiß nicht, wie ich meine Frage umformulieren soll - wenn dein Struct tatsächlich so aussieht, wofür solltest du dann Objekte davon brauchen?`
thas11 - Mi 09.03.11 13:24
Hallo Sebastian!
Mein Struct sieht folgendermaßen aus..
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| struct TABEL_NAME_COL { public const int ID = 0; public const int NAME = 1; public const int STATUS = 2; public const int TAG = 3; }
TABLE_NAME_COL.ID
lg & Danke, Wolfi |
Kha - Mi 09.03.11 13:59
Zitat: |
Eigentlich wie bei einer Statischen Klasse und ich lege auch kein eigenes Objekt dafür an ..... |
Eben, wofür also das Instanzieren überhaupt zulassen? Wärest du nicht verwundert, wenn System.Math ein Struct wäre?
PS: Die Namenskonvention von .NET entspricht der in meinem Beispiel :) .
thas11 - Mi 09.03.11 15:27
Hi!
Ok ich glaub jetzt verstehe ich worauf du hinauswillst...
Es wäre theoretisch eine Instanzierung möglich aber wenn ich eine solche nicht mache ist das Verhalten das gleiche wie bei einer Statischen Klasse...
Danke für deine Hilfe und Geduld!
lg,
Wolfi
stendate - Do 10.03.11 23:35
thas11 hat folgendes geschrieben : |
Ich habe z.B eine AcessTabelle(TestTabelle) und die hat folgende Spalten
ID|NAME|DESCRIPTION|TAG|DATE
Ich lese die Daten aus dieser Tabelle mit dem OleDBDataReader
Beispielcode
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Private const int COL_ID = 0; Private const int COL_NAME = 1; Private const int COL_DESC = 2; Private const int COL_TAG = 3; Private const int COL_DATE = 4;
...
OldeDdDataReader readData = new OleDbCommand("SELECT * FROM Testtabelle",cConnection).ExecuteReader(); while(readData.Read() == true) { Debug.Print(readData[COL_NAME].ToString());
} |
Gibt es in C# eine elegantere Lösung meine ColumnIndizes abzuspeichern als über Konstanten?
|
Man kann dem Reader-Objekt auch einfach den Spalten-Namen als String übergeben:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| ... OldeDdDataReader readData = new OleDbCommand("SELECT * FROM Testtabelle",cConnection).ExecuteReader(); while(readData.Read() == true) { Debug.Print(readData["ID"].ToString()); Debug.Print(readData["NAME"].ToString()); Debug.Print(readData["DESCRIPTION"].ToString()); Debug.Print(readData["TAG"].ToString()); Debug.Print(readData["DATE"].ToString()); } |
Kha hat folgendes geschrieben : |
In einem richtigen Projekt würde niemand mit einem DataReader arbeiten, |
Wenn es um Performance geht dann schon...
thas11 - Do 17.03.11 17:49
Hi stendate!
Danke für deine Antwort!
Das man mir den Spaltennamen auch zugreifen kann wusste ich aber da es mit stark um Performance geht hab ich mich für den Zugriff über den Index entschlossen...
Bringt jetzt nicht enorm viel aber in der Summe zahlt es sich aus.... ;)
lg,
Wolfi
stendate - Do 17.03.11 23:30
thas11 hat folgendes geschrieben : |
Hi stendate!
Bringt jetzt nicht enorm viel aber in der Summe zahlt es sich aus.... ;)
|
Ist der Unterschied messbar? *fg*
Ich denke mal dass die Konvertierung mittels .ToString() hierbei das Meiste kosten dürfte.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!