Autor Beitrag
thas11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Di 08.03.11 18:03 
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

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
//Hier hab ich meine Konstanten welche für die ColumnIndizes der Tabelle stehen 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 08.03.11 19:41 
user profile iconthas11 hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconthas11 hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 08.03.11 20:42 
Wie gesagt, falls du das so meintest:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Mi 09.03.11 13:24 
Hallo Sebastian!

Mein Struct sieht folgendermaßen aus..

ausblenden 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;
}




//.......
//Der Zugriff in anderen Klassen sieht dann so aus 
TABLE_NAME_COL.ID
//Eigentlich wie bei einer Statischen Klasse und ich lege auch kein eigenes Objekt dafür an .....

lg & Danke,
Wolfi
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19
Erhaltene Danke: 1



BeitragVerfasst: Do 10.03.11 23:35 
user profile iconthas11 hat folgendes geschrieben Zum zitierten Posting springen:
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

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
//Hier hab ich meine Konstanten welche für die ColumnIndizes der Tabelle stehen 
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:


ausblenden 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());
}




user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:

In einem richtigen Projekt würde niemand mit einem DataReader arbeiten,


Wenn es um Performance geht dann schon...
thas11 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19
Erhaltene Danke: 1



BeitragVerfasst: Do 17.03.11 23:30 
user profile iconthas11 hat folgendes geschrieben Zum zitierten Posting springen:
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.