Index außerhalb des Arraybereiches
-
NullbockException schrieb:
Debug doch mal an die stelle !!! Wie groß ist "i" wenn die exception kommt? wie groß ist reader2.Length?
1. Also i ist an der Stelle 20 und demzufolge scheitert es schon am ersten Schleifendurchlauf.
2. reader2.Length gibt es nicht: "'System.Data.SqlDataReader' enthält keine Definition für 'Length' und es konnte keine Erweiterungsmethode für 'Length' gefunden werden...
Allerdings sehe ich in der Ergebnisansicht des Readers im lokale Variablenfenster von Visual Studio, dass der Reader mit Werten von 0 bis 58 belegt ist.
Hier mal ein Screenshot von der Situation https://www.dropbox.com/s/3mbuotqb4esjjjn/reader.jpg
Danke...
-
Was zeigt das watchfenster an der stelle "20" denn an?
außerdem würde ich getypt das feld auslesen
int bar= reader2.GetInt32(i);
-
NullbockException schrieb:
Was zeigt das watchfenster an der stelle "20" denn an?
außerdem würde ich getypt das feld auslesen
int bar= reader2.GetInt32(i);
Der Reader sollte an der Stelle 20 den Wert 353 haben. Habe die Codeanpassung vorgenommen, doch leider besteht der Fehler weiterhin.
-
sorry , ich stand grad aufm schlauch! du hast generell ein denkfehler,.. bei jeder iteration
while(reader.read())
bekommst du eine datensatz zurück (das sind die 0-58 stück) ! jeder datensatz hat felder , die anzahl bekiommst du via Fieldcound zurück! da du nur 1 feld hast , kannst du nur index 0 auslesen!
was hast du den vor? wie sie die query aus`?
-
NullbockException schrieb:
sorry , ich stand grad aufm schlauch! du hast generell ein denkfehler,.. bei jeder iteration
while(reader.read())
bekommst du eine datensatz zurück (das sind die 0-58 stück) ! jeder datensatz hat felder , die anzahl bekiommst du via Fieldcound zurück! da du nur 1 feld hast , kannst du nur index 0 auslesen!
was hast du den vor? wie sie die query aus`?
Ich würde gern bestimmte Werte summieren, um später einen Durchschnitt zu berechnen. Das Query gibt zu einer "Personennummer" immer x solcher zu addierenden Zahlen aus. Mal sind es 10, mal sind es 40, usw.
Diese können z.B. so aussehen:
1,52,65,74,75,76,90,91,92,95,3500Welche Felder ich dann wirklich addieren möchte, hängt von der Anzahl der Felder ab. Deshalb wird istart und istop berechnet. Sinn ist, dass extreme Werte nicht mit in die Durchschnittberechnung einfließen (1, 3500), weil sie den Durchschnitt dann ja in eine Richtung verschieben.
-
hmmmm.. d.h. die anzahl der felder in den datensätzen variiert??? sor richtig hab ich das nich verstanden.. zeig mal dein SQL statement
-
NullbockException schrieb:
hmmmm.. d.h. die anzahl der felder in den datensätzen variiert??? sor richtig hab ich das nich verstanden.. zeig mal dein SQL statement
Ja, es gibt Personen, die haben 10 Datensätze und Personen, die haben 50 Datensätze. Beim SQL Statement sieht man bestimmt auch nicht viel mehr.
SELECT BVALUES FROM PERS1KTO WHERE PNR1 = " +sPNr1+" ORDER BY BVALUES ASC
-
ja dass die anzahl der datensätze variieren ist mir klar, aber die felder der datensätze (spalten) ist wohl dann doczh imemr gleich, d.h. du hast nur index 0!
deine query, bzw. reader liefert datensätze mit jeweils genau einem feld (BVALUES)
du aber versuchst auf mehrere felder zuzugreifen! na machts bald "klick"?
bspw:
SELECT BVALUES FROM PERS1KTO WHERE PNR1 = " +sPNr1+" ORDER BY BVALUES AS
da bekomsmt du n Datensätze , welche jeweile EINE zahl (BVALUE) enhalten!
int summe= 0; int cnt =0 ; while(reader2.Read() { summe += reader2.GetInt(0); cnt++; } int average = summe/ cnt;
so bekommst du die summe und durchschnitt der alter aller personen mit der id (sPNr1) zurück!
das musst du jetzt mit jeder persone machen!!!
-
NullbockException schrieb:
na machts bald "klick"?
Ja! Na *klick*
Danke...ich probiere es nachher gleich mal aus und schreibe, ob jetzt alles läuft (denke schon)...
Vielen Dank schonmal bis hierher...
-
kein thema:)