Announcement

Collapse
No announcement yet.

Fehler: Konstantenwert erwartet

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fehler: Konstantenwert erwartet

    zuerst mein SQLite Code:
    [highlight=c#]
    try
    {
    connectDB(DBFilename);
    SQLiteCommand Cmd = new SQLiteCommand();
    Cmd = Conn.CreateCommand();


    Cmd.CommandText = SQLstatement;

    // Datareader: enthält Query
    SQLiteDataReader dr = Cmd.ExecuteReader();
    int FieldCount = dr.FieldCount;


    while (dr.Read())
    {
    //Console.WriteLine(dr.GetString(0));
    //listBox1.Items.Add(dr.GetString(0));

    lv.Items.Add(new ListViewItem(new string [ FieldCount ]
    {
    dr.GetValue(0).ToString(),dr.GetValue(1).ToString( ),dr.GetValue(2).ToString(),dr.GetValue(3).ToStrin g(),dr.GetValue(4).ToString()
    }
    ));


    }
    Cmd.Dispose();
    Conn.Close();
    }
    catch
    {
    MessageBox.Show("Fehler in getSQLqueryLV!");
    }[/highlight]

    An dieser Stelle "new string[FieldCount]" wird für FieldCount folgender Fehler angezeigt: KONSTANTENWERT ERWARTET. Ändere ich den Wert auf eine Zahl, wie zB 5, ist der Fehler weg. Jedoch möchte ich das Stringfeld dynamisch erzeugen.

    Kann mir jemand einen Tipp geben.

  • #2
    Hi,

    Warum definierst Du Dein 'FieldCount' nicht einfach als Konstante ?

    Code:
    const int FieldCount = dr.FieldCount;
    Dies sollte eigentlich helfen.
    MfG

    Comment


    • #3
      Hallo,

      der Compiler kapierts nicht.

      Du hast 2 Möglichkeiten, wobei ich die 2. vorziehen würde:
      Code:
      int fieldCount = 3;
      
      // 1. Möglichkeit:
      listView1.Items.Add(
      	new ListViewItem(
      		new string[3]
      		{
      			"a",
      			"b",
      			"c"
      		}
      	)
      );
      
      2. Möglichkeit:
      string[] s = { "a", "b", "c" };
      listView1.Items.Add(new ListViewItem(s));
      mfG Gü
      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

      Comment


      • #4
        Will anmerken dass ein DataGridView - von dem was ich aus dem Code sehe - besser geeignet sein könnte.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Originally posted by tatoosh View Post
          An dieser Stelle "new string[FieldCount]" wird für FieldCount folgender Fehler angezeigt: KONSTANTENWERT ERWARTET. Ändere ich den Wert auf eine Zahl, wie zB 5, ist der Fehler weg.
          Zunächst einmal ist die Fehlermeldung eindeutig: Es wird beim Compilieren wirklich ein Konstantenwert erwartet, kein Wert, der aus einer Variablen kommt. Ob Lulogs Hinweis wirklich hilft, ist deshalb zweifelhaft, weil der Wert zum Zeitpunkt des Compilierens noch nicht konstant ist.

          Nachdem ich mir die Beispiele in der SDK-Doku/MSDN zum Array in C# genauer angeschaut habe, habe ich den Eindruck, dass es tatsächlich nur zwei Möglichkeiten gibt, die Größe des Arrays festzulegen: entweder explizit durch die Angabe der Dimension oder implizit durch die Anzahl der Elemente:
          [highlight=C#]// explizit
          lv.Items.Add(new ListViewItem(new string[5] { ... } ));

          // implizit
          lv.Items.Add(new ListViewItem(new string[]
          { dr.GetValue(0).ToString(), dr.GetValue(1).ToString(), dr.GetValue(2).ToString(),
          dr.GetValue(3).ToString(), dr.GetValue(4).ToString() }
          } ));[/highlight]

          Jedoch möchte ich das Stringfeld dynamisch erzeugen.
          Das hat doch aber mit der Array-Größe nichts zu tun: Dadurch, dass Du die Elemente explizit angibst, legst Du Dich für den Compiler fest auf diese 5 Strings. Damit kann FieldCount nichts dynamisch machen; also warum willst Du das unbedingt so steuern?

          Wenn Du es tatsächlich "dynamisieren" willst, könntest Du eine List<string> verwenden. Diese hat wirklich eine variable Größe.

          Jürgen

          PS. Man sollte vor dem Speichern doch immer kontrollieren, ob inzwischen etwas dazu gesagt wurde. Gü hat ja eigentlich alles schon erläutert.

          Comment


          • #6
            Man sollte vor dem Speichern doch immer kontrollieren, ob inzwischen etwas dazu gesagt wurde.
            Ich finde es trotzdem gut dass eine Antwort folgt die eine andere Argumentation (aber mit identen Kernaussagen) hat gepostet wird.

            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Code:
              const int FieldCount = dr.FieldCount;
              Dies funktioniert natürlich nicht. Mein Fehler .
              MfG

              Comment

              Working...
              X