Announcement

Collapse
No announcement yet.

Bestimmte recordsets aus ListBox updaten

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

  • Bestimmte recordsets aus ListBox updaten

    Hallo zusammen,
    ich möchte bestimmte Recordsets in einer Datenbank updaten. Die Recordsets, die ein update erhalten sollen, sind zuvor in eine einspaltige ListBox geladen worden.
    Im Prinzip wird aufgrund einer vorher erfolgten SQL-Abfrage eine Spalte bestimmter Datensätze in die ListBox geladen. Bei diese Datensätzen sollen nun einzelne Felder mit einem bestimmten Wert ge-updated werden.
    Versucht hab ich es so:
    Code:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim i As Long
            Dim updateSQL As String = "update tb_user SET comments = 'reserved', shortcut = '" & lblLogin.Text & "' where loginname = '" & ListBox1.Items(i) & "'"
            Dim conn As New SqlConnection("Server=localhost; Initial Catalog=db_user; Integrated Security=True")
            Dim cmd As New SqlCommand(updateSQL, conn)
    
            Try
                conn.Open()
    
                For i = 0 To ListBox1.Items.Count - 1
                    cmd.ExecuteNonQuery()
                Next i
    
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Fehler")
            Finally
                conn.Close()
            End Try
        End Sub
    Das funktioniert, aber nur für den ersten Wert in der Listbox. Wie kann ich erreichen, dass alle Werte der ListBox als Loop durchgerödelt werden und der Update-Befehl für jeden einzelnen Wert der ListBox durchgeführt wird? Ich bin hier schon betriebsblind ;-)

    Bin dankbar für jeden Hinweis!!

  • #2
    Du mußt deinen SqlCommand in der Schleife auch ändern. Nur weil du ursprünglich mal eine Zuweisung mit der Indexvariablen gemacht hast wird nachher nicht durch Magie in der Schleife der string(updateSQL) neu, entsprechend dem geänderten Wert der Indexvariablen, zusammengebastelt.

    Comment


    • #3
      Und das Ganze müsste dann deiner Meinung nach wie aussehen, damit es funktioniert? Ich verstehe zwar was du meinst, wüsste aber spontan nicht wie ichs umsetzen soll...

      Comment


      • #4
        Die schnelle (nicht saubere) Lösung geht genauso, wie ich es Dir unter ListBox-Inhalt in TextBox kopieren erläutert habe:
        [highlight=vbnet]For i = 0 To ListBox1.Items.Count - 1
        cmd.CommandText = "..." // anpassen
        cmd.ExecuteNonQuery()
        Next i[/highlight]
        Aber die korrekte Lösung geht über Parameters:
        [highlight=vbnet]// Befehl vorbereiten
        cmd.CommandText = "update tb_user SET comments = 'reserved', shortcut = @Login " _
        & "where loginname = @Name;"
        // ich habe keine Ahnung von VB, die beiden Zeilen gehören zusammen
        cmd.Parameters.Add("@Login", SqlDbType.NVarChar).Size = 35
        cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Size = 35

        For i = 0 To ListBox1.Items.Count - 1
        cmd.Parameters["@Name"].Value = ListBox1.Items(i)
        cmd.ExecuteNonQuery()
        Next i[/highlight]
        Ich hoffe, Du bist inzwischen so aktiv, dass Du bei Unklarheiten in der SDK-Doku/MSDN - siehe Möglichkeiten der Informationsgewinnung - oder den OpenBooks selbst weitersuchst.

        Jürgen

        Comment


        • #5
          Vielen Dank, genau die 2. Zeile fehlte mir! Jetzt funktionierts alles so wie es soll! :-)
          Und bei Unklarheiten suche ich immer erst selbst, ich hab hier zusätzlich zu MSDN & Co. noch nen ganzen Stapel an Büchern liegen. Nur leider findet man das, was man gerade dringend sucht entweder irgendwann später oder garnicht oder zufällig in völlig anderem Zusammenhang... ;-)

          Comment

          Working...
          X