Autor Beitrag
milea
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Do 09.02.12 22:02 
Hallo!

Ich hab erst angefangen mich mit C# zu beschäftigen und will das Ganze an einem Projekt lernen. Im Moment hänge ich aber fest:
Aus einer SQL-Abfrage erhalte ich Werte aus einer DB. Einen dieser Werte möchte ich in einem Array speichern, das ich die Werte für weitere Abfragen benötige.

Hier mein Code:

ausblenden volle Höhe C#-Quelltext
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:
      sql = "SELECT DISTINCT Kategorie.name, Themen.themenname, Themen.themen_id FROM Kategorie INNER JOIN Themen ON Kategorie.k_id =    Themen.k_id ORDER BY name, themenname";

              SqlCommand objBefehl2 = new SqlCommand(sql, verbindung);
              SqlDataReader objDaten = objBefehl2.ExecuteReader();

            //Größe des Array ergibt sich aus der Menge der Ergebnisse von themen_id (= variable x aus 1. Abfrage) der Abfrage
            int[] themen_id;
            themen_id = new int[x];

            string name = null;
            string themenname = null;
            int themen_id2 = 0;

            try
            {

                    while (objDaten.Read())
                    {

                        name = objDaten.GetString(0);
                        themenname = objDaten.GetString(1);

                        themen_id2 = objDaten.GetInt32(2);

                        //for-Schleife zum Füllen des Arrays
                        for (int i = 0; i < x; ++i)
                        {

                            Response.Write(themen_id2);
                            themen_id[i] = themen_id2;

                        }

                    
                }

              objDaten.Close();
              verbindung.Close();
            }
            catch (Exception ex)
            {
                Response.Write("Error: " + ex.Message);
                //Exception.Message geben Beschreibung zurück, die den momentanen Fehler beschreibt

            }


Nun ist es so, das 19 Werte (= x) aus der DB zurückgegeben werden für themen_id. Und bei meiner jetzigen Konstruktion wird 19x jeder Themen_id in das Array geschrieben. Ich ich möchte, dass jede themen_id aus der Abfrage sql natürlich 1x in das Array geschrieben wird so dass 19 verschiedene Werte drin stehen statt 19x der selbe Wert. Wenn ich mir den Code so angucke ist mir das auch völlig klar, dass da 19x das Selbe drinsteht. Aber ich weiß nicht, wo ich die for-Schleife einfügen muss damit das Array themen_id richtig gefüllt wird. Könnt ihr mir bitte helfen? Danke schonmal!

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 09.02.12 22:12 
Du brauchst keine weitere for Schleife deine 'while (objDaten.Read())'-Schleife reicht doch völlig.

Zum Beispiel

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
int i = 0;
while (objDaten.Read())
{
   ...
   themen_id[i++] = objDaten.GetInt32(2);
}


sollte völlig reichen wenn ich das Problem verstanden habe.

Ein Array zu benutzen ist höchstwahrscheinlich suboptimal. Ich glaube kaum das du mit Sicherheit die Anzahl Datensätze vorhersagen kann die dein SQL liefert. Eine List<int> ist vermutlich geeigneter.

Für diesen Beitrag haben gedankt: milea